尝试使用ProcessBuilder从命令行启动服务器

时间:2019-06-02 05:14:49

标签: java server

我是Java网络的新手,正在为使用Javafx实现的Texas Holdem游戏构建服务器来处理联网的多人游戏(这是我们班的最终项目),我正在尝试将其设置为用户可以选择是否要托管新游戏,从而启动服务器或加入其他服务器(在同一LAN上)的方式。为此,我尝试通过一种当用户决定托管游戏时执行的方法来启动服务器。

我尝试使用ProcessBuilder运行服务器以在编译的类文件上运行java命令,但是不确定它是否成功执行。我还想知道是否可以通过将服务器类设置为Runnable并将“ main”方法重新实现为“ run”方法来避免使其正常执行。

这是我用来从命令行运行服务器的代码。我的服务器编译的类文件的路径为:C:\Users\glacu\Desktop\SillySolitaire\build\classes\sillysolitaire 我正在运行NetBeans 8.2,并且该应用程序从SillySolitaire目录运行。

更新:更改了代码以尝试获取错误流,并同时懒惰地打印它们。我认为,如果进程正常启动,这应该可以工作,但是我从错误流或输出流中都没有得到输出。

String javaExecutable = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";

        try{
            Process p = new ProcessBuilder(javaExecutable, "-classpath", "build" + File.separator + "classes" + File.separator + "*", "sillysolitaire.GameServer").start();
            InputStream inputStream = p.getInputStream();
            BufferedReader isr = new BufferedReader(new InputStreamReader(inputStream));
            InputStream errorStream = p.getErrorStream();
            BufferedReader esr = new BufferedReader(new InputStreamReader(inputStream));
            isr.lines().forEach(System.out::println);
            esr.lines().forEach(System.out::println);
        } catch(IOException e){
            e.printStackTrace();
        }

这是当前服务器的启动代码

    public static void main(String[] args){
        targetPlayers = 2;
        gs = new GameState(targetPlayers);
        dealHands();
        System.out.println("Server is running...");
        ExecutorService pool = Executors.newFixedThreadPool(500);
        try (ServerSocket listener = new ServerSocket(59001)) {
            while (playersInLobby < targetPlayers) {
                handler = new Handler(listener.accept());
                threadList.add(handler);
                pool.execute(handler);
            }
        } catch (IOException e){
            e.printStackTrace();
        }
    }

服务器开始直接运行文件就可以了,但是当我尝试使用ProcessBuilder运行文件时却不能。

更新:我相信这是由ProcessBuilder执行的确切命令。
"C:\Program Files\Java\jdk1.8.0_111\jre\bin\java" -classpath C:\Users\glacu\Desktop\SillySolitaire\build\classes\* sillysolitaire.GameServer
从我的命令行执行它返回:错误:找不到或加载主类sillysolitaire.GameServer
我认为-classpath选项可能出了一些问题,因此我尝试了几种不同的类路径,但是都返回相同的错误。该命令还有其他问题吗?

0 个答案:

没有答案
相关问题