对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中保持为null。无论如何以main()
在runLater线程中调用其中一个的相同方式调用它们?
答案 0 :(得分:1)
我会使用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.
}
答案 1 :(得分:1)
通过调用Runnable
的实例来解决这个问题可能会很麻烦。作为替代方法,使用SwingWorker
来更新主视图和详细视图的表模型。这个example可能是一个有用的注意点。
答案 2 :(得分:0)
根据彼得的建议,我做了以下事情:
我创建了一个名为<option ng-repeat="type in Types" value="{{type.Name}}">{{type.Name}}</option>
的中间Runnable,它返回公开对象RunUIThread
和aView
,因此我可以将它们返回给我的Master程序。彼得,你认为这是有效的吗?
bView