2

可能重复:
如何在 EDT 上运行 JOptionPane?

在看似随机的时间(即如果程序运行足够多次),JOptionPane我编写的窗口将显示一个空白窗口,关闭和确定按钮在那里,但没有我编码的文本。这似乎JOptionPane最终发生在任何编写的程序中;有什么方法可以防止这种情况发生吗?FWIW 这很少(如果有的话)连续发生两次。

我刚刚写了这个,连续运行了15次,没有任何问题。这与我使用JOptionPane. 有什么遗漏吗?

import javax.swing.JOptionPane;
public class SimpleJOptionPane
{
    public static void main(String[] args)
    {
        JOptionPane.showMessageDialog(null, "Hello, World!");
    }//end main
}//end class SimpleJOptionPane

一般不会出现这个问题。JOptionPane通常与预期的文本一起显示。当它不起作用时,在我不知情的情况下会发生什么变化?

正如评论中所建议的,我正在研究使用 EventQueue.isDispatchThread()

如您所见,下面的代码使用另一种方法来显示 JOptionPane。这是一个适当的解决方案吗?

final String ERR_TITLE = "Error";
final String ERR_MSG = "An exception has occured; please start over.";
                    showError(ERR_MSG, ERR_TITLE);

public static void showError(final String MESSAGE, final String TITLE)
{
    JOptionPane.showMessageDialog(null, MESSAGE, TITLE, JOptionPane.ERROR_MESSAGE);
}//end showError
4

1 回答 1

3

如果我是你,我会这样做:

  1. 创建一个委托执行 JOptionPane 的静态方法
  2. 确保我的所有代码都引用该方法而不是 JOptionPane
  3. 在该静态方法中检查空字符串和空值。

-

public static void myShowMessage(String s) {
    if(s == null || "".equals(s)) {
        System.out.println("AHA!  gotcha ...");
    }
    JOptionPane.showMessageDialog(null, s);
}

我知道这听起来可能有点傻,但从经验来看,这在 API 本身不是问题......

于 2012-07-15T08:22:28.650 回答