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

时间:2015-11-07 17:06:20

标签: java jar processbuilder

我想在JPanel中按JButton打开JAR文件。为了实现这个目标,我在ActionLilder里面使用了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文件窗口都正常运行?

我没有通过搜索找到任何解决方案: Run a jar File from java programExecute .jar file from a Java program等。

更新:

我尝试不使用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 b@hadas.lt -apw blood444");
} catch (Exception ex) {
    JOptionPane.showMessageDialog(null, "Exception occured" + ex);
}

问题依然存在。

1 个答案:

答案 0 :(得分:0)

尝试在单独的线程中启动一个进程构建器,以便主线程不会阻塞。从您的代码中,您可以在主线程中执行所有操作。利用swingWorker类的东西在一个单独的线程中启动操作。