在我的客户端/服务器 Java 应用程序中,我发现了一个奇怪的行为,它阻止任何内容显示在 JFrame 中,而不是第一个(登录)。
JFrame 已显示,但它是透明的,如果我调整它的大小,我会有这样的效果:
该应用程序的工作方式是这样的(2个主要的,1个在服务器类中,1个在客户端类中:
SERVER SIDE 1) main 有一个无限循环,当客户端连接到它时启动一个新线程来处理消息
CLIENT SIDE 1) main 获取 GuiLogin JDialog 的单例,并执行一个方法显示它
2) 当用户按下 Login 时,guilogin 中的 ActionListener 调用客户端方法将 LoginRequest 对象分派给 Server,Server 以 LoginResponse 对象进行回复
3)如果电子邮件和密码正确(电子邮件=a,密码=b),它应该显示另一个JFrame,但无论我尝试什么,它总是显示错误 - 透明框架
3b)如果电子邮件和密码不正确,应用程序会显示一个 JDialog(工作正常)
我认为我的错误是概念性的,代码看起来不错,我调用新的 JFrame
guiLogin.dispose();
JFrame j = new JFrame();
j.setVisible(true);
作为独立代码,它可以工作,但是在客户端上我的访客模式消息处理程序中的一个方法中,它的工作原理就像在屏幕截图中一样
eclipse项目的缩小版,剥离了所有与bug无关的类和方法
编辑:我对 Java Gui 和事件非常缺乏经验,我现在检查导致问题的代码在 EDT 内( javax.swing.SwingUtilities.isEventDispatchThread() 返回 true )。我应该在 SwingWorker 线程中移动整个消息处理逻辑吗?