2

JFrame を拡張するメイン クラスがあります。

JTable およびその他の Swing コンポーネントで構成されるフレームのこのインスタンスにパネルを追加します。

この「public static void main」のメインクラスに、swing イベントディスパッチスレッドを設定します。

このインスタンス フレームにパネルを追加し、以下を開始します。

this.setTitle("Test");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);

等...

ここまでは大丈夫です。

現在、JTable にはリスナーがあり、行をクリックするとクラス InfoDialog の新しいインスタンスが開きます。

この InfoDialog で、通常どおり Swing コンポーネントを追加します。

JDialog に次のような別のディスパッチ スレッドがあります。

class InfoDialog  {
    JDialog jd;
    public void initGUI() {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
                 jd = new JDialog();
            jd.setModalityType(ModalityType.APPLICATION_MODAL);
            jd.setTitle("Buy");
            jd.setDefaultCloseOperation(jd.DISPOSE_ON_CLOSE);
            jd.pack();
            jd.setLocationRelativeTo(null);
    jd.setVisible(true);
    }});
   } 
}

イベントディスパッチスレッドを配置すると、発生しているエラーが解決されます (おそらく、以前に現在のスレッドがブロックされたためです)。私の質問は、これが正しい方法ですか?

アドバイスをありがとう。

4

2 に答える 2