こんにちは、私が初めて Java プログラミングを始めたとき、私たちのアプリケーションにいくつかのコードがあることに気付きました。別のスレッドからダイアログが作成されていることに気付きましたが、「機能しているように見えた」ので、まぶたを打つことはありませんでした。次に、このメソッドをコードでラップして、ダイアログを表示しました。
これは次のとおりです。
public class DialogModalVisibleThread
extends Thread {
private JDialog jDialog;
public DialogModalVisibleThread(JDialog dialog, String dialogName) {
this.setName("Set " + dialogName + " Visable");
jDialog = dialog;
}
@Override
public void run() {
jDialog.setVisible(true);
jDialog.requestFocus();
}
}
使用法:
WarnUserDifferenceDialog dialog = new WarnUserDifferenceDialog( _tableDifferenceCache.size() );
DialogModalVisibleThread dmvt = new DialogModalVisibleThread( dialog, "Warn User About Report Diffs");
dmvt.start();
現在、私が知る限り、swing コンポーネントを別のスレッドから作成したり変更したりしてはいけません。すべての更新は、イベント ディスパッチ スレッドで実行する必要があります。確かにこれは上記のコードに当てはまりますか?
ただし、上記のコードは機能しました。
しかし、最近、無数の再描画の問題が発生しています。たとえば、DialogModalVisibleThread を呼び出してダイアログを表示する JButton をクリックします。クリックされたボタンの横にあるボタンが正しく再描画されませんでした。
再描画の問題は、他の開発者のマシンではなく、私のマシンでより頻繁に発生します。もう 1 人の開発者は、デスクトップを 21 インチ モニターに拡張したラップトップを使用しており、モニターがメイン ディスプレイになっています。彼は Java バージョン 1.6.0_27 で Windows 7 を実行しています。
Windows 7 と Java バージョン 1.6.0_24 を搭載したラップトップで実行しています。デスクトップが両方に拡張された 2 つの追加モニターがあります。
それまでの間、Java 1.6 update 27 にアップグレードします。
上記のコードが再描画の問題を引き起こす可能性があるのか 、それとも関連する描画の問題を抱えている人が他にいるのでしょうか?
これらの問題を診断する簡単な方法はありますか?
ありがとう