使用JAVA ProcessBuilder打开的外部JAR文件无法正常工作

使用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"

我想在JPanel中按JButton打开JAR文件。为了实现这个目标,我使用了内置ProcessBuilder的ActionListener。这是我的密码:

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);
}