Java 1.5を対象としたアプリケーションに、カスタムメッセージパネルを含むJOptionPaneがあります。パネルには、特にJTextFieldが含まれています。20回程度の呼び出しごとに、ダイアログには何も表示されません([OK] / [キャンセル]ボタンも表示されません)。ダイアログを画面からドラッグして元に戻し、強制的に再描画すると、コンポーネントは期待どおりに表示され、ペイントの問題は別として、コンポーネントは正常に応答します。これが私がこのバグを示すために得ることができる最小の例です:
public class BugTest {
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// The text field needs to be wrapped in a panel for the bug to show up.
JPanel messagePanel = new JPanel();
// A JLabel won't exhibit the bug, but a JTextField will.
JTextField textField = new JTextField("Some content");
messagePanel.add(textField);
// Loop so we can keep clicking OK until the bug shows up.
while (true) {
int res = JOptionPane.showOptionDialog(null, messagePanel,
"SomeTitle", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE, null, null, null);
}
}
});
}
}
これはSwingのよく知られたバグですか?標準的な回避策はありますか?このための公式のバグレポートを見つけることができませんでした。このバグはJava1.7には存在しないようですが、私のアプリケーションは古い1.5で実行する必要があり、後者で機能する回避策を見つけたいと思います。
関連:モードレスJDialogにコンテンツが表示されない(コード例が含まれていないため、同じバグかどうかを判断するのは困難です)
私がバグを見つけた特定のJavaバージョンは1.5.0_22です。