Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启动并获取.jar的输出(例如Minecraft Bukkit.jar)_Java_Jar_Bukkit - Fatal编程技术网

Java 启动并获取.jar的输出(例如Minecraft Bukkit.jar)

Java 启动并获取.jar的输出(例如Minecraft Bukkit.jar),java,jar,bukkit,Java,Jar,Bukkit,我正在尝试使用以下代码在.jar中启动一些.jar:我正在尝试使用craftbukkit服务器 Runtime rt = Runtime.getRuntime(); Process p = rt.exec("java -jar craft.jar"); BufferedReader out = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedWriter in = new BufferedWriter(

我正在尝试使用以下代码在.jar中启动一些.jar:我正在尝试使用craftbukkit服务器

Runtime rt = Runtime.getRuntime();
Process p = rt.exec("java -jar craft.jar");
BufferedReader out = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter in = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
this.running = true;

while(this.running){
String line;
    if((line = out.readLine()) != null){
        System.out.println(line);
    }
}
问题是,它工作了一段时间,但过了一段时间它停止输出或只是打印“>”,如下图所示。我怎样才能解决这个问题**另外,向bukkit服务器发送命令的正确方法是什么

谢谢

在Java中使用进程时,在while循环的两个独立线程中读取stdout和stderr是至关重要的。否则,子进程可能会在等待耗尽已填充的缓冲区时锁定

使用Java7,您实际上可以将stderr重定向到stdout,并可能将结果流重定向到父stdout。对于旧版本,您需要附加单独的线程

此外:不应使用exec的单字符串变量,而应将args指定为数组。这样更安全,不易出现解析问题

但我不确定这是否是你真正的问题。也许您应该转储错误流,看看它是否有帮助

我这样做:

@Override
public void run(){
// ...
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream())); //of course proc is an instance of Process, and it's set up
while(true){
     String line = stdInput.readLine();
     if(line == null) break; //this is essential, when process terminates, line gets null
     System.out.println(">"+line);
    }
// ...
}
试试看。 从技术上讲,这和你做的很相似,但对我来说很有效,所以我分享它