2011-01-11 19 views
0

如果用戶從菜單中選擇退出選項,我該如何捕捉正在發生的事情? 我的意思是我希望能夠管理將要關閉應用程序的用戶的事件 但正在執行一些活動,因此他/她不應該能夠退出。如果正在運行,則無退出選項

這是我寫的代碼。 一言以蔽之:正在執行

  • 記錄 - >用戶點擊退出 - >警告「進程正在運行,你不能這樣做」(這個過程變亮)

  • 沒有什麼運行 - >用戶點擊退出 - >應用程序關閉

是否有可能通過剛剛加入幾行代碼,而無需重寫 整個程序來解決這個問題?

非常感謝。
MAX

exitAction = new AbstractAction("Exit") { 

      public void actionPerformed(ActionEvent e) { 

       System.exit(0); 
      } 
     }; 
     exitAction.putValue(Action.NAME, "Exit"); 
     // description 
     exitAction.putValue(Action.SHORT_DESCRIPTION, "Exit application"); 
+0

防止用戶操作是一個壞主意。相反,彈出一個對話框,告訴用戶發生了什麼,並要求確認程序應該退出。 – Anon 2011-01-11 17:48:43

回答

0

你需要跟蹤你的工作,以乾淨地做到這一點。如果你不能嘗試遍歷所有的jvm線程,並查看你的一些工作線程是否處於可執行狀態。

請記住,如果用戶願意,用戶可以使用大任務管理器ax殺死應用程序:)。

+0

如何檢查線程是否正在運行?這對我來說是一個棘手的問題。 – max 2011-01-11 17:51:05

+0

Thread.isAlive()方法?http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#isAlive()? – 2011-01-11 17:51:57

0

如果'運行'表示未完成的線程,則可以循環所有已啓動的線程並調用.join()。在此之前顯示消息'等待所有線程完成。你想強制關閉'

0

你可以使用一個變量,一個小旗子,在你想檢查的進程開始時將它設置爲true,當它結束時將它設置爲false。

然後在關閉事件中,您可以檢查該變量是true還是false。

0

如果您在應用程序中沒有使用線程(爲了清楚起見,我假設您是使用線程),那麼當您退出應用程序時,事件調度線程(EDT)將關閉所有線程爲你。

否則,在系統中正確管理和跟蹤您的線程以便在關閉系統之前可以結束它們,這一點非常重要。有很多方法可以做到這一點(請勿使用stop()並儘量避免使用destroy())。我的建議是,在你的線程中,花時間檢查它們是否應該關閉(系統關閉時設置的標誌就是這樣一種可能性)。這樣,你可以清理你的線程,保存任何數據(到文件或其他任何東西,如果這是你需要做的),然後乾淨地關閉。