Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Linux中的全屏摆动帧对焦不正确(Windows可以)_Java_Linux_Swing_Frame - Fatal编程技术网

Java Linux中的全屏摆动帧对焦不正确(Windows可以)

Java Linux中的全屏摆动帧对焦不正确(Windows可以),java,linux,swing,frame,Java,Linux,Swing,Frame,我有一个应用程序,它产生了几个全屏无装饰框架(基本上控制所有屏幕空间)。我的问题是,某些帧上的一些按钮被设计成“切换屏幕”,这基本上意味着显示另一帧而不是当前帧 我在Windows中通过以下方式轻松实现了这一点: target.setVisible(true); target.requestFocus(); this.parent.setVisible(false); 其中target是我切换到的帧。这是因为最初,我将除第一个“主”帧外的所有帧设置为不可见 现在,当我将其移植到Linux环境中

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

我在Windows中通过以下方式轻松实现了这一点:

target.setVisible(true);
target.requestFocus();
this.parent.setVisible(false);
其中
target
是我切换到的帧。这是因为最初,我将除第一个“主”帧外的所有帧设置为不可见

现在,当我将其移植到Linux环境中时,在更改帧时会出现一个丑陋的“闪烁”。在这一瞬间,我可以看到我的桌面背景和应用程序后面任何打开的窗口。我以前在Windows中遇到过这个问题,并通过在使旧帧不可见之前聚焦目标帧来修复它

关于如何解决这个特定于Linux的问题,有什么想法吗

编辑:

可能是一个很好的单帧替代方案。您可以使用或同时使用两者进行导航


更新:这导致Java版本为1.6.0_20的Ubuntu10.04.3 LTS上没有闪存。

检查此线程以避免可能的内存不足,例如非常懒惰的重新绘制,通过创建新对象而失去性能。。。等

1/每个本机操作系统分配/添加JVM的可用内存稍有不同,数量也不同,有关详细信息,请使用一些JProfiler(活动对象、变量、已用/可用内存、通过GC回收内存)检查您的代码

2/只创建一个JFrame,其他顶级容器将是JDialog/JWindow, 不要创建大量JDialogs/JWindows,每次重用都要删除所有JComponents更多信息


3/由于Java6有一个全屏API,GPU补丁和驱动程序大量出现问题。考虑使用它:

从JavaDocs:

请注意,不鼓励使用此方法,因为其行为依赖于平台。相反,我们建议使用
requestFocusInWindow()
。如果您想了解有关焦点的更多信息,请参阅Java教程中的一节


请阅读[此帖][1][1]:谢谢,我会看一看。@mKorbel-我不认为这正是我想要的。OP处理的是击键问题,他的问题与我的不完全相同。
击键
焦点
可能有更多的信息(所有可能的事件都没有完成),或者
OP
在将
Focus
设置为具体的
JComponents
时遇到一些问题?我有全屏画面,直接绘制到图形卡,而不是窗口。问题不在于显式地将焦点更改为帧,因为我可以在Windows环境中这样做。但是,我的代码在Linux中失败。我在问为什么它在Linux中失败,我如何才能不让它在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();
target.requestFocus();