2016-12-30 112 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