全屏幕摆动框架在Linux中没有正确对焦(Windows很好)

我有一个应用程序,产生了几个全屏无装饰框架(基本上控制所有的屏幕空间)。 我的问题是,某些框架上的某些button被devise为“切换屏幕”,这基本上意味着显示另一个框架,而不是当前的框架。

我已经在Windows中使用这个轻松实现了这一点:

target.setVisible(true); target.requestFocus(); this.parent.setVisible(false); 

target是我要切换到的帧。 这工作,因为最初,我设置所有框架除了第一个“主”框架不可见。

现在,当我把它移植到Linux环境中时,在改变帧的时候会出现一个难看的“闪烁”。 在这一瞬间,我可以看到我的桌面背景和我的应用程序背后存在的任何打开的窗口。 我之前在Windows中遇到了这个问题,并通过将目标框架集中到旧的目标框架之前,将其固定。

任何想法如何解决这个Linux的具体问题?

编辑:

 setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); setUndecorated(true); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setBounds(0,0,screenSize.width, screenSize.height); this.getContentPane().setLayout(null); setVisible(true); validate(); 

Solutions Collecting From Web of "全屏幕摆动框架在Linux中没有正确对焦(Windows很好)"

 target.requestFocus(); 

从JavaDocs:

请注意,不鼓励使用这种方法,因为它的行为是依赖于平台的。 相反,我们建议使用requestFocusInWindow() 。 如果您想了解关于焦点的更多信息,请参阅The Java Tutorial中的“ 如何使用焦点子系统 ”一节

CardLayout可能是一个很好的单帧选择。 您可以使用组合框或按钮或二者进行导航。

更新:此示例在Java版本1.6.0_20的Ubuntu 10.04.3 LTS上不会导致闪存。

检查这个线程,以避免可能的内存不足,非常懒惰的修复,通过创建新的对象(S)等性能损失

1 /每个Native OS为JVM添加了可用的内存,使其具有一点点不同和不同的数量,通过使用JProfiler(活动对象,变量,使用/可用内存,GC'ing回收内存)

2 /只创建一个JFrame和其他顶级容器将是JDialog / JWindow,不要创建大量的JDialogs / JWindows,每一个删除所有JComponents的reUse更多信息在这里

3 /补丁与补丁和驱动程序的问题

从Java6开始,就有一个FullScreen API。 考虑使用它: http : //download.oracle.com/javase/tutorial/extra/fullscreen/index.html