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

JavaFX-关闭屏幕时的绘图组件,java,windows,winapi,javafx,javafx-2,Java,Windows,Winapi,Javafx,Javafx 2,我的应用程序在装有Windows 7的平板电脑上运行,Windows 7有时会关闭显示器以节省电池电量。触摸屏幕后,它会再次打开 即使在关闭屏幕后,应用程序仍应保持可操作性,即通常已完成的操作,即播放声音。唯一的问题是,当屏幕关闭时,应用程序尝试向场景添加新组件(将子项添加到显示的GridPane中),当我触摸屏幕并打开时,新添加的组件不可见 这就像有一个缓存,在屏幕打开/关闭时存储和恢复显示的内容。打开屏幕后-当我单击windows按钮键盘或将焦点切换到另一个应用程序时-新添加的组件出现 我尝

我的应用程序在装有Windows 7的平板电脑上运行,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);
}
它要求您在依赖项中具有jna和jna平台

当屏幕关闭时,应在绘图后调用此方法。如何检测它是另一个问题。由于我的应用程序很少在没有用户输入的情况下自动绘制,因此我在每次自动绘制之后都会调用它


它在Win7中工作。

尝试在javafx jira中提交一个bug。你很快就会得到答案的。但是,您也可以尝试javafx-8来检查它是否已修复。如果修复-尝试在javafx jira中查找某些内容