gpt4 book ai didi

JavaFX - 屏幕关闭时的绘图组件

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:04 25 4
gpt4 key购买 nike

我的应用程序在平板电脑(使用 Windows 7)上运行,有时会关闭显示屏以节省电池。触摸屏幕后,它再次打开。

即使在关闭屏幕后,应用程序也应保持运行,这通常是完成的(即播放声音)。唯一的问题是,当屏幕关闭并且应用程序尝试向场景添加新组件(技术上 - 将子组件添加到显示的 GridPane )时,当我触摸屏幕(并且它打开)时,新添加的组件不可见。

就像有一个缓存,可以在屏幕打开/关闭时存储和恢复显示的内容。打开屏幕后 - 当我单击 Windows 按钮(键盘)或将焦点更改到另一个应用程序时 - 将出现新添加的组件。

我尝试设置-Dprism.dirtyopts=false,但它没有改变任何东西。

我的 Java 是 7u67。

这是已知的错误吗?有什么编程解决方法吗?我曾考虑过使用 WinAPI 强制重绘/刷新应用程序窗口,但对于这种情况来说它似乎太大了。

最佳答案

我刚刚想出了“简单”的解决方法:

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.ptr.IntByReference;

/** WINAPI CONSTANTS **/
private static final int RDW_UPDATENOW = 0x0100;

/**
* Redraws all windows associated with currently running process.
*/
public static void redrawApplicationWindows() {
final int processId = Kernel32.INSTANCE.GetCurrentProcessId();
User32.INSTANCE.EnumWindows(
new WinUser.WNDENUMPROC() {
@Override
public boolean callback(WinDef.HWND hwnd, Pointer pointer) {
IntByReference someProcessId = new IntByReference();
User32.INSTANCE.GetWindowThreadProcessId(hwnd, someProcessId);
if (someProcessId.getValue() == processId) {
User32.INSTANCE.RedrawWindow(hwnd, null, null, new User32.DWORD(RDW_UPDATENOW));
}
return true;
}
}, Pointer.NULL);
}

它要求您在依赖项中具有 jnajna-platform

该方法应该在屏幕关闭时在绘制后调用(如何检测它是另一个问题)。由于我的应用程序很少自动绘制(无需用户输入),因此我在每次绘制自动发生后都调用了它。

它适用于Win7。

关于JavaFX - 屏幕关闭时的绘图组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27292899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com