0

このコードを使用して、Java プログラムで (可視の) 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ファイルは実行されていません...

4

5 に答える 5

2

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

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

編集:

Unix/Linuxのファイルパーミッションを設定してeXecuteビットを設定する方法や、引用符をエスケープする方法があるかどうか、特にJavaについてはわかりません。しかし、それは次のようになります。

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

于 2009-03-23T14:08:22.330 に答える
2

これはうまくいくはずです。スクリプトを実行するだけでなく、ターミナルも開きます。

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

于 2009-03-23T14:15:39.427 に答える
1

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

ところで、自宅の Mac のクラスであなたのコードを試してみたところ、.sh ファイルが問題なく実行されました。コマンドラインからJavaクラスを実行していました。たぶん、sh が PATH にないだけです。

于 2009-03-23T14:15:50.393 に答える
0

.sh ファイルが実行可能であることを確認したと思いますね。

于 2009-03-23T14:08:20.740 に答える