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),一旦我完成网络连接,此等待消息就会正确显示。

我哪里错了?这是一个摆动问题(或)线程问题吗?

您能否帮我显示一条等待消息,直到后端活动完成?

4

2 回答 2

3

下的代码在actionPerformed事件调度线程(EDT)下执行,而不是在评论中所说的主线程上。

这意味着只要发生​​连接事件,EDT 就会被阻止,因此它不必处理其他一些 UI 内容,例如显示您的JDialog.

此外,与问题无关,但请注意,您创建了一个JFrame永远不会显示的并且是您的JDialog.

于 2013-02-20T08:34:18.000 回答
3

您在这里混合了线程 - 所有与 UI 交互的操作(例如创建新框架)都必须发生在事件调度线程 (EDT) 或您所称的“主”线程上。后台任务应该在不同的线程上执行。

基本上你有它向后 - 你应该在新线程中执行后台工作,并在主线程中创建新框架,这与你现在的方式相反。

于 2013-02-20T08:35:22.250 回答