2016-03-22 19 views
0

Netbeans'i kullanarak Mac'te çalışma zamanında bir uygulama açmak istiyorum Aşağıdaki kodu kullandım ama istisna atar. Bu kodu, Mac'te kullandığım birkaç değişiklikle Windows için kullandım. Herkes bana doğru kodu önerebilir.Mac OSX'te çalışma zamanı sırasında bir uygulamayı açın. Netbeans

else 
    { 
    try { 

     Runtime r = Runtime.getRuntime(); 

     p = Runtime.getRuntime().exec("/Applications/TextEdit.app /Users/apple/Documents/java files/scratch files/hi.rtf"); 


     A4 a4sObj = new A4(new String[]{jComboBox2.getSelectedItem().toString()}); 


    } catch (IOException ex) { 
     Logger.getLogger(serialportselection.class.getName()).log(Level.SEVERE, null, ex); 
    } 


}  
+1

Daha fazla bilgi için bkz. [Masaüstü Sınıfıyla Nasıl Entegre Edilir] (https://docs.oracle.com/javase/tutorial/uiswing/misc/desktop.html) – MadProgrammer

+0

varsayılan değil o zaman bu sınıf benim için yararlı olmayacaktır –

+0

Mac Uygulamaları sadece özel bir "klasör", bu yüzden onları "çalıştır" edemezsiniz, bunun yerine "İçindekiler/MacOS" dizinine (uygulama paketinin içine bakmanız gerekir)),// ​​Applications/TextEdit.app/Contents/MacOS/TextEdit' gibi daha fazla bir şey olabilir. Ben de 'ProcessBuilder' kullanarak 'Process' doğrudan – MadProgrammer

cevap

2

Pekala, bu biraz kazmaya uğradı. .app paketini çalıştırmanın tercih edilen yolu, open komutunu kullanmaktır. Bir dosyayı açmak için uygulama almak için, ... örneğin -a parametresini kullanmak zorunda

import java.io.IOException; 
import java.io.InputStream; 

public class Test { 

    public static void main(String[] args) { 
     String cmd = "/Applications/TextEdit.app"; 
     //String cmd = "/Applications/Sublime Text 2.app"; 
     String fileToEdit = "/Users/.../Documents/Test.txt"; 

     System.out.println("Cmd = " + cmd); 
     ProcessBuilder pb = new ProcessBuilder("open", "-a", cmd, fileToEdit); 
     pb.redirectErrorStream(true); 
     try { 
      Process p = pb.start(); 
      Thread t = new Thread(new InputStreamConsumer(p.getInputStream())); 
      t.start(); 
      int exitCode = p.waitFor(); 
      t.join(); 
      System.out.println("Exited with " + exitCode); 
     } catch (IOException | InterruptedException ex) { 
      ex.printStackTrace(); 
     } 
    } 

    public static class InputStreamConsumer implements Runnable { 

     private InputStream is; 

     public InputStreamConsumer(InputStream is) { 
      this.is = is; 
     } 

     @Override 
     public void run() { 
      int read = -1; 
      try { 
       while ((read = is.read()) != -1) { 
        System.out.print((char)read); 
       } 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 

    } 

} 
için "varsayılan" editörü çağırmak istiyorsanız `Desktop.edit` kullanabilirsiniz
+0

"hi.txt" dosyasını açmak için kodunuzu kullandım ancak şu komutu yazıyor: Cmd = /Application/TextEdit.app /users/apple/Documents/hi.txt dosyası mevcut değil. 1 –

+0

ile çıkıldı Bu aptalca görünecek, ancak yeni Dosya ("/ users/apple/Documents/hi.txt") kullanmayı deneyin (mevcut) ve mevcut kullanıcının var olduğundan ve erişilebilir olduğundan emin olun. – MadProgrammer

+0

nope beklendiği gibi çalışmıyor –

İlgili konular