2016-12-30 9 views
0

私はJavaを勉強していましたが、Macの端末のような他のアプリケーションを開くアプリケーションを作りたかったのです。RunTime 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になります。 catchブロックでprintStackTrace()を使用すると、何が間違っているかをよりよく知ることができます。 – sreejit

+0

VnETの43行目はどれですか? – Frakcool

答えて

0

これは、Mac上でターミナルを開くには、正しい方法ではありませんです。 Macの

p = r.exec("Terminal"); 

は、コマンドラインからアプリを開きたい場合は(ちなみにターミナル!)は、このコマンドを使用することができます。

open -a Safari 

だから、あなたのJavaプログラムでは、使用コードの行以下:

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

open -aコマンドは、「ターミナル」と呼ばれる「アプリケーション」を開くためにランタイムに指示します。

openコマンドの詳細については、this pageを参照してください。

希望すると便利です。

+0

すっごくありがとう! – Isaac

+0

答えがあなたに役立つ場合は、回答をアップアップして受け入れることをお勧めします。 – anacron

関連する問題