2016-12-30 111 views
0

我一直在學習Java和我想提出申請,將打開其他應用程序,如在Mac終端。運行時間執行在Mac

我已經得到它的工作,我在這一點上有點困惑失敗多次。

這裏是我的代碼

package pac; 



import java.awt.Desktop; 

import java.io.File; 

import java.io.IOException; 

import javax.swing.*; 

public class VnET extends JFrame { 


    public VnET() { 
    JFrame frame = new JFrame("Frame"); 

    //Optional: What happens when the frame closes? 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    // Create components and put them in the frame. 
    frame.setTitle("VnET"); 

    // Size the frame. 
    frame.setSize(500, 250);; 

    // Show it. 
    frame.setVisible(true); 
    //centers window 
    frame.setLocationRelativeTo(null); 
    } 

    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       new VnET(); 
      Runtime r = Runtime.getRuntime(); 
      Process p = null; 
      try { 
       p = r.exec("Terminal"); 
       p.waitFor(); 
      } catch (Exception e) { 
       System.out.println("Error executing terminal"); 
      } 
      System.out.println("Terminal returned"+ p.exitValue()); 
      } 
     }); 
    } 

} 

這是控制檯日誌

Error executing terminal 
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
     at pac.VnET$1.run(VnET.java:43) 
     at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
     at java.awt.EventQueue.access$500(EventQueue.java:97) 
     at java.awt.EventQueue$3.run(EventQueue.java:709) 
     at java.awt.EventQueue$3.run(EventQueue.java:703) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
+1

的可能的複製[什麼是空指針異常,怎麼解決呢?(http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

+0

「終端」是否是Mac上的有效命令?如果不是'p'將是空的。在catch塊中使用printStackTrace(),可以讓你更好地瞭解哪裏出了問題。 – sreejit

+0

哪一行是VnET上的第43行? – Frakcool

回答

0

這不是打開終端在Mac上的正確方法。

p = r.exec("Terminal"); 

在Mac上,如果你想打開通過命令行應用程序(順便終端!),你可以使用這個命令:

open -a Safari 

所以,在Java程序中,使用下面的代碼行:

p = r.exec("open -a Terminal"); 

open -a命令告訴運行時打開「應用程序」稱爲「終端」。

參考this page上的打開命令的詳細信息。

希望這會有所幫助!

+0

謝謝soo! – Isaac

+0

如果答案對您有幫助,那麼註冊並接受答案是一種很好的做法。 – anacron