[英]When I dispose and reopen a JFrame, it doesn't show anything
我有一个使用JFrames创建的相当简单的Java应用程序。 有一个在我的计划不止一个JFrame的。 我在程序的开头启动了一个菜单。 浏览完菜单后,我将菜单JFrame放置了。
JFrame主菜单具有一个菜单按钮,稍后应会启动完全相同的菜单。 但是,当您从ActionListener内部启动菜单时(按菜单按钮时),JFrame无法正常启动。 没有任何组件出现,并且颜色熄灭。
但是,从ActionListener外部启动菜单时,JFrame会完美显示。 我尝试了多种方法来解决此问题,但没有一个起作用。
单击此处可获取我的完整程序代码。
================================编辑================= ===============
另外,我想告诉您,我意识到我的代码有点混乱。 我不确定该如何编写其他代码。
我被迫使用Thread.sleep(x);
因为Swing计时器不是我想要的。 当计时器关闭时,Swing计时器将激活ActionListener。 我需要一个在继续执行代码之前需要等待一秒钟的系统。
我意识到在里面的ActionListeners的while (repeater==0)
循环看起来很疯狂,但这是我使其工作的唯一方法。 如果我放了一个ActionListener,只是有while循环而在里面没有任何代码,那么当我按下按钮时什么也不会发生。
正如MadProgrammer所说,我会:
建议:放弃当前的方法,然后重新开始。
但是,我当前编写程序的方式是我知道如何完成所需工作的唯一方式。 我阅读了这些教程,但是仍然不知道如何按照您告诉我的方式来改进代码。
我感谢每个人都试图告诉我改善糟糕的“ Java语法”,但是就我而言,我将在未来20年内不继续执行该程序,并从中受益。
我之前看过Swing计时器,并且了解了整个new Timer(speed, this);
概念,但我不明白这将如何使我的代码变得更好。
如果有人想告诉我如何修复我的ActionListeners或Thread.sleep(x);
行,请告诉我。 谢谢。
您正在使用Thread.sleep(3000);
阻止事件调度线程Thread.sleep(3000);
-请勿执行此操作,这将阻止绘制用户界面
有关该问题的更多详细信息,请参见Swing中的并发性;有关可能的解决方案,请参见如何使用Swing计时器 。
您可能还想考虑一下“使用多个JFrame,良好/不良做法”? 并考虑使用CardLayout
或JTabbedPane
如果需要临时阻止用户(以显示错误消息或收集重要细节),请考虑使用模式JDialog
。 有关更多详细信息,请参见如何制作对话框
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.