2

重複の可能性:
EDT で JOptionPane を実行するにはどうすればよいですか?

一見ランダムな時間に (つまり、プログラムが十分な回数実行された場合)、プログラムしたJOptionPaneウィンドウに空白のウィンドウが表示されます。[閉じる] ボタンと [OK] ボタンはありますが、コーディングしたテキストはありません。JOptionPaneこれは、最終的に書かれたすべてのプログラムで発生するようです。これを防ぐ方法はありますか?FWIW これが 2 回連続して発生することはめったにありません。

私は今これを書いて、まだ問題なく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. その静的メソッドで、空の文字列と null をチェックします。

-

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 に答える