Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
算法的javaswing接口_Java_Algorithm_Swing_User Interface - Fatal编程技术网

算法的javaswing接口

算法的javaswing接口,java,algorithm,swing,user-interface,Java,Algorithm,Swing,User Interface,我正在尝试为我正在开发的算法构建一个Swing GUI。在运行过程中,算法会不断修改GUI。我已经读到,长时间运行的任务应该从GUI中分离出来,修改swing组件应该从EDT线程中完成。然而,我需要的是这两者之间的某种重叠:运行算法,算法进行一些更改,这些更改必须反映在GUI中,算法继续执行,进行其他更改,这些更改必须再次反映在GUI中,等等 你能给我一些关于我应该用什么来实现我的目标的建议吗 提前感谢您。您应该使用: public class MyAlgorithm { void d

我正在尝试为我正在开发的算法构建一个Swing GUI。在运行过程中,算法会不断修改GUI。我已经读到,长时间运行的任务应该从GUI中分离出来,修改swing组件应该从EDT线程中完成。然而,我需要的是这两者之间的某种重叠:运行算法,算法进行一些更改,这些更改必须反映在GUI中,算法继续执行,进行其他更改,这些更改必须再次反映在GUI中,等等

你能给我一些关于我应该用什么来实现我的目标的建议吗

提前感谢您。

您应该使用:

public class MyAlgorithm {

    void doAlgorithm() {
        while(notDone()) {
            // Iterative work
            ...
            // Update the UI
            if(shouldUpdateUI()) {
                SwingUtilities.invokeLater(() -> {
                    // UI update code goes here
                });
            }
        }
    }
}
如果您没有使用Java 8,只需将lambda(
()->{…}
)替换为
可运行的

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        // UI update code goes here
    }
});

但是要注意,UI将在另一个线程上更新,因此您可能必须获取您的状态的防御副本,并根据该副本更新UI。

请查看,并感谢提供的来源:)谢谢您的帮助。我会试试看我能完成什么。