繁体   English   中英

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

[英]JavaFX - Drawing component when the screen is turned off

我的应用程序可在平板电脑(使用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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM