用JAVA ProcessBuilder打开的外部JAR文件无法正常工作
我想通过在JPanel中按JButton来打开JAR文件。为了实现这个目标,我在里面用了ProcessBuilder的ActionListener。这里是我的代码:用JAVA ProcessBuilder打开的外部JAR文件无法正常工作
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ProcessBuilder pb = new ProcessBuilder("java", "-jar"
, "f:/Documents/TBot/topbotclient.jar"
, "-n", getTopBotName().getText()
, "-pw", getTopBotPass().getText()
, "-s", getScript_name().getText()
, "-w", getWorld().getText()
);
try {
Process p = pb.start();
} catch (IOException ee) {
ee.printStackTrace();
}
}
});
的问题是,打开JAR文件无法正常工作 - 我按它的一些按钮后,它冻结。但是,如果关闭了用于打开外部JAR的初始JAVA窗口,则JAR文件将再次起作用。如何获得初始窗口和打开JAR文件窗口的功能?
我没有找到通过搜索任何解决方案: Run a jar File from java program, Execute .jar file from a Java program等
UPDATE:
我尽量不使用的ProcessBuilder和使用 “的Runtime.exec” 代替。
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec(" java -jar f:/Documents/TBot/scripts/topbot.jar -n Fataho -pw diehard15 -s scriptjoiner -w 301 -nort -a [email protected] -apw blood444");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Exception occured" + ex);
}
问题仍然存在。
尝试在单独的线程中启动一个进程构建器,以便您的主线程不会阻塞。从你的代码你在主线程中做所有事情。利用swingWorker类的东西在独立的线程中开始操作。
你为什么认为它阻塞?没有调用'waitFor()'。另外,OP说次要计划是冻结的计划。 – RealSkeptic
我尝试使用新的线程(新的Runnable(){...,它没有帮助。问题仍然是一样的。 – Fataho
其他程序是否对'System.in','System.out'或'System.err'做任何事情? – RealSkeptic
我试图找出,但我失败了。我不知道第二个程序(我想打开的JAR文件)与System.in,System.out或System.err有什么关系。我使用这个程序,可以在这里下载https://topbot.org/ – Fataho