.............(略)
DialogBox dialog=new DialogBox(LogIn.users[index]);
dialog.setTitle("与"+LogIn.users[index].nickname+"聊天中");
dialog.setSize(500,400);
dialog.setVisible(true);
while(true){//接收对方信息,并显示
WaitForPackets packet=new WaitForPackets();
if(!packet.received.equals("")){
dialog.textPane.append(Color.RED,dialog.aUser.nickname+":\n");
dialog.textPane.append(Color.BLACK,packet.received+"\n");
}
}
...................(略)
这是我从我一个程序里摘出的一小段代码。功能是要显示一个对话框,并将接收的信息在这个对话框中显示出来。我的问题是:当我要打开对话框时,为什么窗口是打开了,但是窗口里面本该显示的组件却一个都显示不出来?(我觉得应该是因为那个while(true)死循环导致的)。请解释原因,并给出我一个解决的办法来。谢谢!

解决方案 »

  1.   

    你把dialog.setVisible(true); 放在循环的后面,像这样:
    .............(略) 
    DialogBox dialog=new DialogBox(LogIn.users[index]); 
    dialog.setTitle("与"+LogIn.users[index].nickname+"聊天中"); 
    dialog.setSize(500,400); while(true){//接收对方信息,并显示 
    WaitForPackets packet=new WaitForPackets(); 
    if(!packet.received.equals("")){ 
    dialog.textPane.append(Color.RED,dialog.aUser.nickname+":\n"); 
    dialog.textPane.append(Color.BLACK,packet.received+"\n"); 


    dialog.setVisible(true); 
    ...................(略) 
      

  2.   

    这个问题很好嘛,加上一个this.validate()就OK了。
      

  3.   

    aceeci,你说的不对。你应该看到dialog.setVisible(true);  之前是个死循环,根本执行不到这条语句。
      

  4.   

    this.validate()也试过了。还是不行啊
      

  5.   

    while(true)把你显示的窗口的运行线程占用了
     除非到返回 或结束为止
    否则窗口永远没机会执行刷新的代码