【问题标题】:Wait for message result from user like JOptionPane等待来自 JOptionPane 等用户的消息结果
【发布时间】:2013-11-11 15:45:17
【问题描述】:

我希望我的自定义消息类的行为方式与以下 sn-p 中的 JOptionPane 相同:

int reply = JOptionPane.showConfirmDialog(
     null, 
     "Is the weather beautifull?", 
     "Question", 
     JOptionPane.YES_NO_OPTION
);
if (reply == JOptionPane.YES_OPTION) {
    // do something in response to yes...
} else {
    // do something in response to no...
}

所以我真正想要的是,我创建自己的消息对象,显示它并在用户按下按钮时做出反应,伪代码如下:

show my question message;
wait for user button press without blocking UI thread;
do something depending on which button the user pressed;

我尝试了所有方法让我的消息框像 FuturesWait/Notify 等的 JOptionPane 一样,但我总是以在阻止我的 UI 线程。

JOptionPane 这样做的秘诀是什么? :)

【问题讨论】:

    标签: java multithreading swing wait joptionpane


    【解决方案1】:

    docs

    对话框可以是模态的。当模态对话框可见时,它会阻止用户 输入到程序中的所有其他窗口。 JOptionPane 创建 模态的 JDialogs。要创建非模态对话框,您必须使用 直接使用 JDialog 类。

    modal window:

    ...要求用户在返回之前与它进行交互 操作父应用

    关于实现,我猜 Swing 会阻塞 EDT 并为模态对话框创建另一个线程。

    【讨论】:

    • 感谢您的回答。我知道,作为对话框的 JoptionPan 会阻止所有其他用户输入,但是线程等待回复是如何完成的呢?或者更好地问,我怎样才能让我的线程等待结果而不阻塞 ui 线程?
    • 好的,我解决了,这是我的解决方案的代码示例:open-sourced.de/show_article.php?articleid=61
    猜你喜欢
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    相关资源
    最近更新 更多