如何通过命令行向服务器发出命令

时间:2014-07-18 16:28:28

标签: java eclipse windows batch-file cmd

我正在开发一个应用程序,只需单击一下按钮即可启动Minecraft服务器。我已成功启动服务器,但现在我正试图找到一种方法来停止服务器通过相同的cmd进程。

这是我启动服务器的代码......

public static void startServer() {
    System.out.println("Starting server...");
    try {
        server = Runtime.getRuntime().exec(
                "java -jar -Xmx1024M -Xms1024M minecraft_server.jar nogui");
        output = server.getOutputStream();
        input = server.getInputStream();
        writer = new BufferedWriter(new OutputStreamWriter(output));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这告诉运行时执行应用程序的同一目录中的run.bat文件。此方法还初始化了我在此类顶部创建的OutputStreamInputStream个对象。

这是我停止服务器的代码......

public static void stopServer() {
    System.out.println("Stopping server...");
    // server.destroy();
    try {
        writer.write("stop\n\r");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

“stop”是我试图向服务器发出以阻止它的命令,但由于某种原因,命令永远不会发送到服务器。

更多信息:

  • 服务器正在cmd.exe中运行,因此所有服务器cmd都需要在cmd中发布。

  • 服务器名为minecraft_server.jar,因此我必须使用命令行来运行服务器并从服务器获取输出并向其输入输入。

  • run.bat文件包含文本java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui

  • 我的主要目标是将“停止”命令写入服务器以停止它。

1 个答案:

答案 0 :(得分:1)

正如@clearspam23所述,当你写任何东西时,你就是在杀死这个过程。

其次,你正在写这个过程'输出流,您想要在输入流中写入。编辑:nope

此外,任何服务器命令通常都通过“输入”验证。按键,因此您可能需要在命令后立即添加回车符(' \ r')来模拟它。

相关问题