从服务器Java返回的消息中打开新的GUI

时间:2013-12-11 01:50:54

标签: java swing user-interface

我正在为一个类设计一个项目,该类在到达GUI之前打开一系列GUI。每个组件独立运行,但是当我们尝试使用从服务器返回的消息来创建新的GUI时,它会创建窗口,但没有任何组件。任何想法?

例如。

我们有一个登录屏幕,然后将ID发送到服务器,该服务器向客户端返回可用白板列表,这很好。然后,当我们希望客户端在收到消息后创建GUI时,会出现一个标题正确的框,但没有任何组件存在。我早些时候在跳过可用的电路板并打开白板时,没有创建白板组件,但计算机认为它已经成功创建了白板。

我们尝试过这样的事情......

ChooseBoardGUI newChoose = new ChooseBoardGUI(out, availableBoards);
newChoose.setVisible(true);
newChoose.pack();
String numberOfBoard = in.readLine().substring(2);
WhiteboardGUI a = createWhiteboard(out, numberOfBoard);

关于为什么新的GUI会出现空白的任何想法?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

可能出现的问题:

  • 您正在Swing事件线程上调用一个长时间运行的任务,将其绑定,以便它无法按照预期的方式绘制GUI。也许你正在等待套接字发送信息但是在EDT中执行此操作,或者Swing E 发布 D ispatch T hread。这是创建窗口但未正确绘制的常见原因。
  • 或者你在代码中没有显示错误(这是毫无疑问的,因为你没有向我们展示任何相关的代码,所以我应该重新发表它,“你的代码中有一个错误显示,除了前面的子弹“)中所述。

解决方案是:

  • 如果您的问题是由第一个问题引起的,那么请务必让所有长时间运行的任务在Swing事件线程的线程后台运行。 SwingWorker可以很好地工作。
  • 如果您的问题是第二个问题,那么请向我们展示更多代码并提供更多信息。最好创建并发布sscce(请查看链接)。

顺便说一句:听起来好像你的GUI被构造成向用户抛出几个JFrame。如果是这样,请考虑重新设计您的代码,以便您的单独GUI面向创建JPanels,然后让您的程序显示一个主要稳定的JFrame,但通过CardLayout交换“ views ”,通常是JPanels 。


关于Swing Concurrency的一个很棒的教程:Lesson: Concurrency in Swing