2016-12-30 7 views
0

Я изучаю Java, и я хотел создать приложение, которое откроет другие приложения, такие как terminal на mac.RunTime Execute On 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

Возможный дубликат [Что такое исключение NullPointerException и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

+0

Является ли «Terminal» действительной командой на Mac? Если не «p» будет null. Использование printStackTrace() в блоке catch даст вам лучшее представление о том, что не так. – sreejit

+0

Какая строка - строка 43 на VnET? – Frakcool

ответ

0

Это не правильный путь, чтобы открыть терминал на Mac.

p = r.exec("Terminal"); 

На Mac, если вы хотите, чтобы открыть приложение с помощью командной строки (кстати терминал!), Вы можете использовать эту команду:

open -a Safari 

Таким образом, в вашем Java программы, используйте следующие строки кода:

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

команда open -a сообщает Время воспроизведения, чтобы открыть «App» под названием «Терминал».

Для получения дополнительной информации о команде open обратитесь к this page.

Надеюсь, это поможет!

+0

Спасибо, много! – Isaac

+0

Если ответ поможет вам, это хорошая практика для продвижения и принятия ответа. – anacron