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

我有一个控制器类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 - 具有多个摆动UI的EventQueue.invokeLater,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35942706/

10-09 00:10