gpt4 book ai didi

java - 使用 Runtime.getRuntime().exec() 启动的 jar 运行时间比从命令行启动的时间长

转载 作者:行者123 更新时间:2023-12-01 11:49:31 28 4
gpt4 key购买 nike

我有以下问题:

我有一个简单的.jar程序,它在文本控制台中编写..

如果我开始使用 cmd (java -jar myProgram.jar),程序将运行1 秒

但我想使用 JButton 从另一个程序启动程序:

startMyProgram.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Run a java app in a separate system process
Process proc = Runtime.getRuntime().exec("java -jar myProgram.jar");

// Then retreive the process output
InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
System.out.println(convertStreamToString(in));
}
});

如果我使用第二种方式(JButton方式),程序运行10秒

为什么?为什么跑这么久?如果我让他通过另一个线程,那么需要的时间太长,达到 10 秒。

最佳答案

基于 When Runtime Exec Won't 中的 StreamGobbler无需直接扩展 Thread。

public class StreamGobbler implements Runnable {
private InputStream in;
public StreamGobbler(InputStream in) {
this.in = in;
}
@Override
public void run() {
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
try {
String line = null;
while ((line = br.readLine()) != null) {
// could log it here
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

用它来接收 exec() 之后流中的所有输出

Process proc = Runtime.getRuntime().exec("java -jar myProgram.jar");
...
new Thread(new StreamGobbler(in)).start();
new Thread(new StreamGobbler(err)).start();;

关于java - 使用 Runtime.getRuntime().exec() 启动的 jar 运行时间比从命令行启动的时间长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28908688/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com