【问题标题】:Blank Java Swing Frame空白 Java 摆动框架
【发布时间】:2014-02-22 16:34:53
【问题描述】:

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

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

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

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

  3. 如果我在没有登录类的情况下运行应用程序(即直接运行 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);

【问题讨论】:

    标签: java multithreading swing concurrency


    【解决方案1】:

    你有一个经典的 Swing 线程问题,你在 Swing 的事件线程上运行长时间运行的代码,也称为 Event Dispatch Thread 或 EDT,这样做会阻止 EDT 完成绘制 GUI 和与用户交互的必要任务。

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

    有关更多信息,请查看:Lesson: Concurrency in Swing

    【讨论】:

    猜你喜欢
    • 2013-02-10
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多