gpt4 book ai didi

java - 如何使用 SwingUtilities.invokeLater 调用阻塞模式

转载 作者:行者123 更新时间:2023-12-02 11:01:52 34 4
gpt4 key购买 nike

我正在尝试从另一个线程创建自定义阻塞模式,但不明白如何进行。这是我的模式:

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 兼容代码。

像这样从另一个线程实现阻塞模式的最佳方法是什么?

最佳答案

您应该能够使用invokeAndWait为此。

否则,您必须使用某种并发原语(waitnotifyCondition 等)才能获得调用 showModal 的线程等待事件返回。不过,invokeAndWait 已经为您实现了这一点,所以它应该可以工作。

关于java - 如何使用 SwingUtilities.invokeLater 调用阻塞模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51273870/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com