2012-08-16 96 views
3

我正在創建一個java桌面應用程序。我有兩個按鈕「創建」和「取消」。如果我按下創建它將在新窗口中創建一個報告。 我的問題是「取消」按鈕。如果用戶按下創建按鈕,則需要一些時間來創建新報告。取消按鈕只能在創建時間內使用。如果用戶按取消按鈕,報告創建操作應該中止。我添加動作偵聽器來創建和取消按鈕,但是當我點擊創建我不能夠同時點擊取消按鈕。如何停止在java swing中執行的動作

回答

2

嘗試在單獨的線程中運行每個進程。取消原因不起作用是創建需要時間來完成其過程。在那段時間,它佔據主線程並停止任何可能由其他UI元素執行的操作(包括取消按鈕)。

您的取消按鈕可能正在工作。但是每次點擊它時,被觸發的事件都會放到隊列的後面,以便在創建按鈕的事件之後進行處理。通過將事件處理放在單獨的線程中,並同步兩個按鈕所需的任何資源(只要這些資源是線程安全的!),您應該可以通過取消按鈕輕鬆停止由事件按鈕創建的線程。

+0

官方Javadoc說Swing *不是線程安全的*,所以這不是一個好的方法。 – asteri 2012-08-16 15:59:40

+0

這隻適用於您打算在單獨的線程中更新的擺動元素。如果他在單獨的線程中更新按鈕(或大多數擺動UI元素),這將是不安全的。所以你是對的,它不是線程安全的,但這不是正在做的事情。提問者只是想停止按鈕觸發的事件。 – Perley 2012-08-16 17:40:25

0

嘗試創建兩個不同的ActionListener s:一個用於「創建」JButton,另一個用於「取消」JButton。這應該允許一方在另一方正在處理時作出迴應。