Java 如何防止空白JOptionPane窗口
可能重复:Java 如何防止空白JOptionPane窗口,java,swing,joptionpane,Java,Swing,Joptionpane,可能重复: 在看似随机的时间(即,如果程序运行的次数足够多),我已编程的JOptionPane窗口将显示一个空白窗口关闭和确定按钮,但没有我编码的文本。这似乎最终会发生在使用JOptionPane编写的任何程序中;有什么方法可以防止这种情况吗?FWIW这种情况很少(如果有的话)连续发生两次 我刚刚写了这个,并且连续运行了15次,没有任何问题。这与我在使用JOptionPane时使用的编码完全相同。有什么东西不见了吗 import javax.swing.JOptionPane; public
在看似随机的时间(即,如果程序运行的次数足够多),我已编程的
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
如果我是你,我会这么做:
我知道这听起来有点傻,但根据经验,这不是API本身的问题…@james在任何特定的程序中都不会出现任何程度的一致性。相反,在我使用JOptionPane编写的任何程序中,它似乎都是随机出现的。如果你愿意,我可以发布其中任何一个,你需要看多少代码?你检查过这个了吗?可能您没有在事件调度线程上执行与Swing相关的任务,请查看。如果没有,这是我最好的猜测:-)@MattB:你没有在
EDT-事件调度线程上调用你的代码
永远不要在main()
方法或任何其他线程
@MattB没有问题,总是值得检查;)一个轻微的错误,不管是哪种方式,控件都会到达showMessageDialog(…)
,所以为什么要进行检查,我们从来没有将showMessageDialog(…)
放在else块中:-)这个想法只是在代码尝试发送空字符串时进行检查。除此之外…关键是要排除它。我还设置了一个EventQueue.isDispatchThread()检查,就像应该在EDT(事件调度线程)上执行错误GUI更新的另一个可能位置一样——这种“间歇性故障”问题是不遵守该规则的典型标志。有关详细信息,请参阅。@MattB,以便确定问题实际发生的位置。IE-是因为您意外地向屏幕发送了一个空白值,还是因为这是ETD问题,还是一个bug??
public static void myShowMessage(String s) {
if(s == null || "".equals(s)) {
System.out.println("AHA! gotcha ...");
}
JOptionPane.showMessageDialog(null, s);
}