使用JAVA ProcessBuilder打开的外部JAR文件无法正常工作
我想在JPanel中按JButton打开JAR文件。为了实现这个目标,我使用了内置ProcessBuilder的ActionListener。这是我的密码:使用JAVA ProcessBuilder打开的外部JAR文件无法正常工作,java,jar,processbuilder,Java,Jar,Processbuilder,我想在JPanel中按JButton打开JAR文件。为了实现这个目标,我使用了内置ProcessBuilder的ActionListener。这是我的密码: myButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ProcessBuilder pb = new ProcessBuilder("java", "-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文件窗口都正常工作
我没有通过搜索找到任何解决方案:
,
等等
更新:
我尝试不使用ProcessBuilder,而是使用“runtime.exec”
问题仍然存在。尝试在单独的线程中启动processbuilder,以便主线程不会阻塞。从您的代码中,您可以在主线程中执行所有操作。使用swingWorker之类的东西在一个单独的线程中启动操作。另一个程序是否对
System.in
、System.out
或System.err
?我试图找出答案,但失败了。我不知道第二个程序(我想打开的JAR文件)是否与System.in、System.out或System.err有关。我使用这个可以在这里下载的程序,为什么你认为它被阻塞了?没有调用waitFor()
。另外,OP说第二个程序是冻结的。我尝试使用新线程(new Runnable(){…),但没有帮助。问题仍然是一样的。
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 b@hadas.lt -apw blood444");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Exception occured" + ex);
}