簡體   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