Java 无法在Process.Runtime.exec语句行之前执行任何操作

Java 无法在Process.Runtime.exec语句行之前执行任何操作,java,process,runtime.exec,Java,Process,Runtime.exec,经过长时间的搜索,我在这里发布了第一篇文章,但是仍然得到了关于这个问题的答案,请在这个问题上帮助我 我正在使用Netbean 6.9.1构建一个Java应用程序,该应用程序对几个不同的外部程序进行大量调用,因此我使用进程和运行时函数来调用外部程序 整个应用程序过程分为几个阶段,我希望通过更新GUI textarea通知用户应用程序当前运行到哪个阶段,代码如下所示: Runnable doWorkRunnable = new Runnable() {

经过长时间的搜索,我在这里发布了第一篇文章,但是仍然得到了关于这个问题的答案,请在这个问题上帮助我

我正在使用Netbean 6.9.1构建一个Java应用程序,该应用程序对几个不同的外部程序进行大量调用,因此我使用进程和运行时函数来调用外部程序

整个应用程序过程分为几个阶段,我希望通过更新GUI textarea通知用户应用程序当前运行到哪个阶段,代码如下所示:

            Runnable doWorkRunnable = new Runnable() {
            public void run() {
    System.out.println("hello world");
    btnTranscribe.setEnabled(false);
    areaOutput.setEditable(false);
    areaOutput.setEnabled(false);
    areaOutput.setText("Performing segmentation, please wait till process is done\n"); }
};
        SwingUtilities.invokeLater(doWorkRunnable);
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec(cmd , null, path);
public void executeCommand(字符串cmd,文件路径) {

在执行流程之前,我使用了swingutiles.invokeLater,如下所示:

            Runnable doWorkRunnable = new Runnable() {
            public void run() {
    System.out.println("hello world");
    btnTranscribe.setEnabled(false);
    areaOutput.setEditable(false);
    areaOutput.setEnabled(false);
    areaOutput.setText("Performing segmentation, please wait till process is done\n"); }
};
        SwingUtilities.invokeLater(doWorkRunnable);
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec(cmd , null, path);

但是所有这些都失败了,我是否得到了错误的GUI和进程线程协调顺序?

尝试将sleep置于execute方法之前。以验证发生了什么。

您正在EDT(更新GUI的线程)上执行这项工作。因此,在所有这些工作完成之前,gui无法更新。您要做的是运行一个单独的线程来完成所有工作,并定期调用SwingUtilities.invokeLater进行状态更新。

您好,感谢回复=)。我已将thread.sleep放在execute方法前面,但gui仍然无法更新>。您的意思是basi凯莉,我需要创建一个线程,并将这个执行方法放在线程内?几乎是这样。只有进程启动和处理进入另一个线程。然后使用SwingUtilities.invokeLater方法与EDT线程交互(其他线程可能不会直接与gui交互).hihi,我已为所有此CmdExec进程创建了一个线程,我已将最新代码放在主要内容之上,为了调用此类,CmdExec tryDemo=new CmdExec();tryDemo=new CmdExec(strSegment,fSegment);tryDemo.run();用于启动线程,但我没有将SwingUtilities.invokeLater放在这些进程的任何部分,它根本不会运行tryDemo.run(),因为它是无效的…另外,我可以知道到目前为止我做得对吗?非常感谢您对这个问题的友好帮助我再次,我刚刚添加了另一个可运行的代码(因此线程用于进程执行,可运行到GUI更新)用于GUI更新命令,如上面的P/S 2中所示,我在进程执行之前使用了swingutiles.invokeLater,如下所示:SwingUtilities.invokeLater(doWorkRunnable);Runtime rt=Runtime.getRuntime();process proc=rt.exec(cmd,null,path);但是所有这些都失败了,我是否得到了错误的GUI和进程线程协调顺序?