2009-03-23 19 views
0

私は私のJavaプログラムが(可視)CMDウィンドウオープンにするために、このコードを使用しています:私はどこOSXでCMDを実行しますか?

try { 
      String line; 
      Process p = Runtime.getRuntime().exec("cmd /C start \"Render\" \"" + myPath + "\\punchRender.cmd\""); 
      BufferedReader input = 
        new BufferedReader(new InputStreamReader(p.getInputStream())); 
      while ((line = input.readLine()) != null) { 
      System.out.println(line); 
      jLabel7.setText(line); 

      } 
      input.close(); 
     } catch (Exception err) { 
      err.printStackTrace(); 
     } 

と私はOSXのターミナルで同じことをやろうとしてきたが、これは今で:

try { 
      String line; 
      Process p = Runtime.getRuntime().exec("sh " + myPath + "/punchRender.sh"); 
      BufferedReader input = 
        new BufferedReader(new InputStreamReader(p.getInputStream())); 
      while ((line = input.readLine()) != null) { 
      System.out.println(line); 
      jLabel7.setText(line); 

      } 
      input.close(); 
     } catch (Exception err) { 
      err.printStackTrace(); 
     } 

これまでのところ、運ません:(任意の提案.SHファイルも実行されていない...

+0

エラーを説明できる場合は、大いに役立ちます。 – mkb

答えて

2

私はあなたのシェルスクリプトが実行ビットを持っていることを確認し、シェルスクリプトファイル名を渡すだけです。

Process p = Runtime.getRuntime().exec(myPath + "/punchRender.sh")

編集:

実行ビットまたはどのように引用符をエスケープするを設定することでのUnix/Linux用のファイルのアクセス権を設定するためにとにかくがある場合、私は特にJavaのか分かりません。これは動作するはず

Process chmod = Runtime.getRuntime().exec("chmod u+x \"" + myPath + "/punchRenderer.sh\"")

+0

これはターミナルアプリケーションではなく、bashプロセスだけを開始します。 – mkb

+0

私は、同じプログラムを実行する直前に.shファイルを書いています...実行ビットでどのように書くことができますか? – Alan

0

私はあなたが.SHファイルが実行可能であることをチェックしましたと仮定? 、ねえ?

+0

これは必ずしも必要ではありません。 – mkb

2

:しかし、このようなものになるだろう。スクリプトを実行するだけでなく、ターミナルを開いただけでなく、:

Process p = Runtime.getRuntime().exec("open -a /Applications/Utilities/Terminal.app \"" + myPath + " /punchRender.sh\"");

+0

これは動作しません。 OPはスクリプトの出力をキャプチャしようとしています。プロセスpはここでは出力を生成しない「オープン」コマンドです。 – mkb

+0

ああ申し訳ありませんが...それを逃した。 – Koraktor

1

新しい見えるターミナルウィンドウをしたい場合は、直接シェルを実行することはできません。ターミナルを起動し、シェルスクリプトではなく.commandファイルを実行する必要があります。私は、あなたのJavaプロセスにそのコマンドのstdoutを接続するのがどれほど難しいかはわかりません。あなたは、端末に出力を得る他の方法を考えなければならないかもしれません。

ところで、自宅のMacで自分のコードをクラスで試してみましたが、.shファイルが正常に実行されました。私はコマンドラインからjavaクラスを実行していました。たぶんあなたのPATHにはちょうどshがありません。

0

も同様にを標準出力として取り込み、それをダンプすることをお勧めします。それは何が起こっているかについてあなたにいくつか考えを与えるはずです(それは一般的に良い習慣です)。

ブロッキングの問題を避けるために、標準出力と標準エラーを別のスレッドで収集する必要があります。 StreamGobblerについてhereを参照してください。

関連する問題