0

蘋果JVM上的各種OS X版本顯然已經被打破,它們的時候就應該(例如,如果您使用的是關閉一個應用程序的主JFrame的點擊不生成的windowClosing事件關閉按鈕)。解決方法對於不符合規定的JVM不發送的windowClosing事件

(在最近的蘋果的Java更新,你可以設置一個屬性強制爲生成事件,但是這不是我要找的)

我的問題很簡單:我想當用戶關閉應用程序時顯示「提示」。但是我不能(因爲沒有事件產生的事實)檢測到用戶關閉了窗口。

所以我想我可以用一個關閉掛鉤:

Runtime.getRuntime().addShutdownHook(...) 

但是顯然從創建一個關閉掛鉤一個JFrame似乎有問題:這就像如果EDT已經走了,一旦關閉鉤子被調用。

我嘗試了幾件事情,沒有什麼真正有意義的:像我的「提示」JFrame保持灰色(儘管它從任何地方調用,但關閉掛鉤)或程序立即退出。我嘗試着使用一個鎖存器,並從關機掛鉤等待鎖存器,但好像EDT不再存在。

目前,我正在認真考慮產卵第二Java應用程序只是爲了顯示工具提示作爲一種解決方法,但我認爲這是一個有點矯枉過正(但至少它的工作)。

有沒有人嘗試從關機鉤創建一個窗口,並在美國東部時間調用的東西以及是否有任何陷阱需要注意的? (請記住,由於已知的非常長時間的Apple VM錯誤,我無法可靠地捕獲OS X上的窗口關閉事件)。

+1

我不熟悉這個OS X的bug。你有參考/鏈接呢? –

+0

呃,當我關閉它時,我想讓應用程序執行的最後一件事是打開其他東西。 –

+0

@Dave Newton:關閉應用程序時彈出一個窗口非常非常常見。例如,您可能遇到軟件彈出窗口,詢問您*「您沒有保存文件xxx,是否要在退出」*之前保存它「。 –

回答

1

如果窗口實際關閉,並且應用程序停止後再東西是調用JFrame.dispose()方法。覆蓋這個,並在那裏添加你的代碼。

否則,你可以添加一個守護線程監聽到的窗口偵聽封閉方法,守護程序可以添加提示,然後處理窗口。您可以延遲處理,直到完成工具提示。

我從來沒有聽說過這個錯誤,但事情只會越來越好,現在蘋果心不是釋放自己的JDK的。

相關問題