2012-08-16 101 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。这应该允许一方在另一方正在处理时作出回应。