我正在尝试从另一个线程创建自定义阻止模式,但是不知道如何执行。这是我的模态:
public class BlockingModal extends JDialog {
private BlockingModal view;
public BlockingModal(JFrame parent) {
super(parent);
this.setModal(true);
}
public void showModal() {
BlockingModal view = this;
if (SwingUtilities.isEventDispatchThread()) {
view.setVisible(true);
} else {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
view.setVisible(true);
}
});
}
}
}
我希望我能够从另一个线程创建此模式的新实例,并只需在其上调用myModal.showModal()
。
但是,很显然,如果通过invokeLater
调用它,它将不再受阻。
我正在尝试在大型非EDT代码库中创建新的EDT兼容代码。
从这样的另一个线程实现阻塞模式的最佳方法是什么?
答案 0 :(得分:1)
您应该可以使用invokeAndWait
。
否则,您必须使用某种并发原语(wait
和notify
,Condition
等)才能使调用showModal
的线程等待直到事件返回。 invokeAndWait
已经为您实现了此功能,因此它应该可以工作。