2015-11-07 33 views
0

我想通过在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 programExecute .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); 
} 

问题仍然存在。

+0

其他程序是否对'System.in','System.out'或'System.err'做任何事情? – RealSkeptic

+0

我试图找出,但我失败了。我不知道第二个程序(我想打开的JAR文件)与System.in,System.out或System.err有什么关系。我使用这个程序,可以在这里下载https://topbot.org/ – Fataho

回答

0

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

+0

你为什么认为它阻塞?没有调用'waitFor()'。另外,OP说次要计划是冻结的计划。 – RealSkeptic

+0

我尝试使用新的线程(新的Runnable(){...,它没有帮助。问题仍然是一样的。 – Fataho