java - 具有多个 swing UI 的 EventQueue.invokeLater

标签 java swing invokelater

关于 EventQueue.invokeLater() here. 有一个很好的讨论

我有一个 Controller 类 Master(),它在我的应用程序中加载两个 UI 窗口。例如:

public class Master(){

     public Master(){
        aView = new subView();
        bView = new subView();

其中subView扩展了JFrame并具有以下主要方法:

public class SubView extends JFrame{
    ....

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new SubView();
            }
        });}
}

请注意,SubView.main() 使用 invokeLater()。我的问题是如何在 master 中调用Later()?像这样的东西:

public class Master(){

     public Master(){
        aView = EventQueue.invokeLater(new subView);
        bView = EventQueue.invokeLater(new subView);

事情没这么简单,因为 invokeLater 不返回任何内容。此外,因为它是“稍后调用”,所以 aView 和 bView 的值在 Master 中保持为空。无论如何,是否可以以与 main() 在 runLater 线程中调用其中之一相同的方式来调用两者?

最佳答案

我会使用invokeAndWait,因为您需要等待结果。

SubView aView, bView;

public Master() {
    java.awt.EventQueue.invokeAndWait(new Runnable() {
        public void run() {
            aView = new SubView();
            bView = new SubView();
        }
    });
    // aView and bView will be initialised.
}

关于java - 具有多个 swing UI 的 EventQueue.invokeLater,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35942706/

相关文章:

java - 如何访问远程服务器上的EJB?

java - 将 JList 添加到 JPanel 与 JLabel 不同(除了明显的之外),为什么?

java.awt.IllegalComponentStateException

java - 忽略事件分派(dispatch)线程如何让这个程序工作?

java - 用于创建 Lambda 的 AWS Java SDK 版本

java - Thread.sleep 是模拟 HTTP 请求以进行测试的好方法吗?

java - RxJava Flowable.create(),如何尊重subscribeOn()线程

java - JFrame 留在后台而不是关闭

java 从另一个线程更新 UI 组件