0

コマンドプロンプトを介してMinecraftサーバーを開いたり終了したりできるようにする必要があるプログラムを書いています。これまでのところ、私が持っているコードは次のとおりです。

Runtime.getRuntime().exec("cd ./Server"); //go to the server directory
Process server = Runtime.getRuntime().exec("java -Xmx1024M -Xms1024M -jar minecraft_server.exe nogui"); //run minecraft server in nogui mode
Thread.sleep((long)(1000*60*.5)); //wait 30 seconds
Runtime.getRuntime().exec("stop"); //terminate the server
Thread.sleep((long)(1000*60*.5)); //wait 30 seconds
server.destroy(); //forcibly terminate the server assuming it hasn't already
System.exit(0);

これは、私が思いついた基本的なロジック コードです。BufferedWriters を使用してみましたが、機能せず、cd コマンドを実行してもエラーが発生します。minecraft.net/download.jsp にある Minecraft_Server.exe を使用しています。「停止」コマンドは、プロセスがアクティブなときに実行され、プログラムにサーバーを保存してから終了するように指示します。何らかの方法でスレッドを使用する必要がありますか? 助けてください:)私はすでに答えを見つけようとして数時間を費やしましたが、私はただ無知です笑。

4

5 に答える 5

3

「cd ./Server」コマンドは、次の exec 呼び出しで最初の呼び出しの結果が取得されないため、ここでコンテキストが失われると思います。つまり、exec の各呼び出しは、他の exec の呼び出しから完全に独立しています。

代わりに、これの一部をシェル スクリプトに入れてみて、単純にスクリプトを実行してください。いずれにせよコマンド ライン経由でサーバーを制御している場合、これは既に試したことよりも複雑ではありません。

于 2011-06-15T14:24:45.330 に答える
1

後で実行するすべてのコマンドに使用される作業ディレクトリを指定できるProcessBuilder ( here )を見たいと思うかもしれません。

于 2011-06-15T14:23:06.703 に答える
1

各コマンドは、個別のプロセスとして実行されます。

「cd ./Server」は、後で実行するコマンドには影響しません。

stop というコマンド ライン プログラムはありますか。

私は書くだろう

Thread.sleep(30 * 1000); // 30 Seconds.

私は System.exit(0); を呼び出しません。

于 2011-06-15T14:23:41.243 に答える
1

特定のディレクトリでコマンドを実行するには、特別なバージョンの exec を使用します

public Process exec(String command, String[] envp, File dir)

dirプロセスの作業ディレクトリはどこですか

于 2011-06-15T14:28:55.220 に答える
0

コマンドを文字列配列に入れてみてください:

String[] cmd = { "cd","./Server" };

String[] cmd2 = {"java", "-Xmx1024M", "-Xms1024M", "-jar", "minecraft_server.exe", "nogui"}

それから試してみてください

Runtime.getRuntime().exec(cmd); //go to the server directory
Process server = Runtime.getRuntime().exec(cmd2); //run minecraft server in nogui mode
Thread.sleep((long)(1000*60*.5)); //wait 30 seconds
Runtime.getRuntime().exec("stop"); //terminate the server
Thread.sleep((long)(1000*60*.5)); //wait 30 seconds
server.destroy(); //forcibly terminate the server assuming it hasn't already
System.exit(0);

また、何を停止するかを参照していないため、停止しても何もしません。

于 2011-06-15T14:29:46.123 に答える