1

ネットワーク接続を確立しようとしていますが、詳細は JFrame にあります。ユーザーがボタンをクリックすると、新しいスレッドが開始され、メイン スレッドがネットワーク接続を確立するまで待機メッセージが表示されます。私はこのコードを書きました

 public void actionPerformed(ActionEvent arg0) {
     Thread ref = new Thread(new Test());//Create a new thread
     ref.start();
      new AIDRTConnManager().createConnection(ipAddress, portAddress);//main thread
      }



//This is my Thread Class
    public class Test implements Runnable{
    JDialog waitDialog;
    JPanel panel1 = new JPanel();
    JLabel waitLabel;
    JFrame frame;


    public void run(){
        frame = new JFrame();
         waitDialog = new JDialog( frame,AIRDT.toolName, true );
         waitDialog.setDefaultCloseOperation( JDialog.DO_NOTHING_ON_CLOSE );  
         JLabel waitLabel = new JLabel( "Trying to Connect to PleaseWait...",ErrorDialog.icon,SwingConstants.CENTER ); 
            panel1.add( waitLabel ); 
            waitDialog.add( panel1 );  
            waitDialog.setSize( 100, 40 ); 
            waitDialog.setBounds( 500,300, 300, 80 ); 
        waitDialog.setVisible( true ); 
    }
}

しかし、ボタンをクリックすると、Jdialog は待機メッセージ (JLable) なしで空のフレームを表示し、ネットワーク接続を完了すると、この待機メッセージが適切に表示されます。

どこが間違っているのですか?これは Swing の問題 (または) スレッドの問題ですか?

バックエンド アクティビティが完了するまで待機メッセージを表示する方法を教えてください。

4

2 に答える 2

3

actionPerformedあなたがコメントで言うように、メインスレッドではなく、イベントディスパッチスレッド(EDT)の下でコードが実行されます。

これは、接続が発生している限り EDT がブロックされているため、JDialog.

また、問題とは関係ありませんが、JFrame表示されない を作成し、それが の親であることに注意してくださいJDialog

于 2013-02-20T08:34:18.000 に答える
3

ここでスレッドを混同しています。新しいフレームの作成など、UI と対話するすべての操作は、イベント ディスパッチ スレッド (EDT)、または呼び出す「メイン」スレッドで実行する必要があります。バックグラウンド タスクは別のスレッドで実行する必要があります。

基本的には逆向きです。新しいスレッドでバックグラウンド作業を実行し、メインスレッドで新しいフレームを作成する必要があります。これは、現在の方法とは逆です。

于 2013-02-20T08:35:22.250 に答える