显示“JOptionPane.showMessageDialog”不停止执行流程

发布于 2024-10-26 02:36:21 字数 301 浏览 10 评论 0原文

我目前正在开展一个项目,该项目比我最初想象的要复杂得多。我现在的目标是显示一个消息对话框,而不停止程序中主线程的执行。现在,我正在使用:

JOptionPane.showMessageDialog(null, message, "Received Message", JOptionPane.INFORMATION_MESSAGE);

但这会暂停主线程中的其他所有内容,因此它不会一次显示多个对话框,而是在另一个对话框之后显示。这 m= 可以像创建一个新的 JFrame 而不是使用 JOptionPane 一样简单吗?

I'm currently working on a project that's getting more complex than I thought it would be originally. What I'm aiming to do right now is show a message dialog without halting the execution of the main thread in the program. Right now, I'm using:

JOptionPane.showMessageDialog(null, message, "Received Message", JOptionPane.INFORMATION_MESSAGE);

But this pauses everything else in the main thread so it won't show multiple dialogs at a time, just on after the other. Could this m=be as simple as creating a new JFrame instead of using the JOptionPane?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

丑疤怪 2024-11-02 02:36:28

根据 文档

JOptionPane 创建模式 JDialog。要创建非模态对话框,必须直接使用 JDialog 类。

上面的链接显示了创建对话框的一些示例。


另一种选择是在其自己的线程中启动 JOptionPane,如下所示:

  Thread t = new Thread(new Runnable(){
        public void run(){
            JOptionPane.showMessageDialog(null, "Hello");
        }
    });
  t.start();

这样,即使模式对话框已启动,程序的主线程也会继续运行。

According to the docs:

JOptionPane creates JDialogs that are modal. To create a non-modal Dialog, you must use the JDialog class directly.

The link above shows some examples of creating dialog boxes.


One other option is to start the JOptionPane in its own thread something like this:

  Thread t = new Thread(new Runnable(){
        public void run(){
            JOptionPane.showMessageDialog(null, "Hello");
        }
    });
  t.start();

That way the main thread of your program continues even though the modal dialog is up.

╄→承喏 2024-11-02 02:36:28

您可以启动一个单独的 Runnable 来显示对话框并处理响应。

You could just start a separate Runnable to display the dialog and handle the response.

鹤仙姿 2024-11-02 02:36:28

试试这个:

  EventQueue.invokeLater(new Runnable(){
                        @Override
                        public void run() {
                     JOptionPane op = new JOptionPane("Hi..",JOptionPane.INFORMATION_MESSAGE);
                     JDialog dialog = op.createDialog("Break");
                     dialog.setAlwaysOnTop(true);
                     dialog.setModal(true);
                     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);      
                     dialog.setVisible(true);
                        }
                    });

try this one:

  EventQueue.invokeLater(new Runnable(){
                        @Override
                        public void run() {
                     JOptionPane op = new JOptionPane("Hi..",JOptionPane.INFORMATION_MESSAGE);
                     JDialog dialog = op.createDialog("Break");
                     dialog.setAlwaysOnTop(true);
                     dialog.setModal(true);
                     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);      
                     dialog.setVisible(true);
                        }
                    });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文