如何在Java Swing中停止执行Action?

3

我正在创建一个Java桌面应用程序。我有两个按钮“创建”和“取消”。如果我按下“创建”按钮,它将在新窗口中创建一个报告。我的问题在于“取消”按钮。如果用户按下“创建”按钮,创建新报告需要一些时间。取消按钮只能在创建期间工作。如果用户按下取消按钮,则报告创建操作应该中止。我向创建和取消按钮添加了动作侦听器,但是当我点击创建后,无法同时点击取消按钮。

2个回答

2
尝试在单独的线程中运行每个进程。取消操作无法正常工作的原因是创建过程需要时间来完成其流程。在此期间,它会占用主线程,并停止任何其他UI元素可以执行的操作(包括取消按钮)。
您的取消按钮可能正在工作。但是每次单击它时,触发的事件都会被放入处理队列的末尾,位于创建按钮事件之后。通过将事件处理程序放在单独的线程中,并同步两个按钮所需的任何资源(只要这些资源是线程安全的!),您应该能够轻松地使用取消按钮停止由事件按钮创建的线程。

官方的Javadoc表示Swing不是线程安全的,因此这不是一个好的方法。 - asteri
这仅适用于您打算在单独的线程中更新的Swing元素。如果他在单独的线程中更新按钮(或大多数Swing UI元素),那么这将不安全。所以你是对的,它不是线程安全的,但这不是正在做的事情。提问者只是想停止由按钮触发的事件。 - Perley

0
尝试创建两个不同的ActionListener:一个用于“创建”JButton,另一个用于“取消”JButton。这样可以在一个处理时响应另一个。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接