![](/img/trans.png)
[英]OnPause return NullPointerException when screen is turned off
[英]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);
}
它要求您在依賴項中具有jna
和jna-platform
。
屏幕關閉后,繪制后應調用此方法(這是檢測它的另一個問題)。 由於我的應用程序很少自動繪制(沒有用戶輸入),因此我在每次自動繪制之后都放置了它的調用。
它適用於Win7。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.