繁体   English   中英

空白的Java摇摆框架

[英]Blank Java Swing Frame

我是一名学生,正在尝试更多地了解Java开发,目前正在使用swing创建一个简单的客户端/服务器IM应用程序。

让我试着解释一下我得到的问题:

  1. Login类在启动时运行,在成功通过服务器验证后(工作正常),ClientChat类被实例化。

  2. ClientChat创建一个新的JFrame,与服务器建立新连接并创建新的I / O流。 所有这些背景的东西工作正常,但新框架是完全空白的。

  3. 如果我在没有Login类的情况下运行应用程序(即直接运行ClientChat),则不存在此问题。

到目前为止不成功的方法:

  1. 使用frame.pack()。
  2. 使用frame.validate()。
  3. 将Login的JFrame传递到ClientChat并简单地切换面板而不是创建新的框架。

从登录():

    panel.add(userLabel);
    panel.add(passLabel);
    panel.add(userEntry);
    panel.add(passEntry);   
    panel.add(button);

    frame.add(panel, BorderLayout.NORTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Chat Room Authentication");
    frame.setSize(300, 120);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    ...

    frame.setVisible(false);
    ClientChat clientChat = new ClientChat(serverIP);
    clientChat.start();

来自ClientChat():

    userText = new JTextField();
    chatWindow = new JTextArea();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    frame.setTitle("Logged in as "+user.toUpperCase());
    frame.add(userText, BorderLayout.SOUTH);
    frame.add(new JScrollPane(chatWindow), BorderLayout.CENTER);    
    frame.setSize(300, 150);
    frame.setVisible(true);

你有一个经典的Swing线程问题,你在Swing的事件线程上运行长时间运行的代码,也称为E vent D ispatch T hread或EDT ,这样做会阻止EDT执行它绘制GUI并与用户交互的必要任务。

解决方案:使用SwingWorker帮助您创建一个后台线程,该线程允许长进程不干扰Swing GUI并允许它与GUI良好通信。

有关这方面的更多信息,请查看: 课程:Swing中的并发性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM