繁体   English   中英

使用Java按顺序运行命令行命令

[英]Using Java to run Command Line commands in order

我正在编写一个程序,该程序需要能够通过命令提示符打开和终止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。 “ stop”命令在进程处于活动状态时运行,并告诉程序保存服务器然后终止。 我是否需要以某种方式使用线程。 请帮忙:)我已经花了几个小时试图找到答案了,我只是一无所知。

我认为您的“ cd ./Server”命令在这里会丢失上下文,因为对exec的下一次调用不会获得第一个调用的结果。 换句话说,对exec的每个调用完全独立于对exec的其他调用。

尝试将其中一些放置在Shell脚本中,然后简单地执行该脚本。 如果仍然通过命令行控制服务器,那么这并没有比您已经尝试过的复杂。

您可能想要查看ProcessBuilder( 在此处 ),您可以其中指定将要用于之后要执行的所有命令的工作目录。

每个命令都作为单独的进程运行。

您的“ cd ./Server”对您之后运行的命令没有影响。

您是否有一个名为stop的命令行程序?

我会写

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

而且我不会打电话给System.exit(0);

要在特定目录下运行命令,请使用特殊版本的exec。

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

dir是进程的工作目录

尝试将命令放入字符串数组中:

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);

另外,由于您不参考要停止的内容,因此停止也无济于事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM