【问题标题】:Java SwingWorker Socket Server does not get cancelled when i cancel the the SwingWorker当我取消 SwingWorker 时,Java SwingWorker 套接字服务器不会被取消
【发布时间】:2011-09-11 03:07:47
【问题描述】:

我有一个作为 Java SwingWorker 运行的 Socket 服务器。

SwingWorker 接收传入的连接,并在连接后将套接字移交给负责连接的 Executor。 Executor 调用一个 SocketHandler,它将通过 run() 方法处理套接字。

现在,我在 GUI 上有一个按钮,上面写着停止。当我按下停止按钮时,我想停止 SwingWorker 的执行。为此,我在按下停止按钮时调用了一个 cancel(true) 方法。

现在,尽管我的程序调用了 cancel(true) 方法,SocketHandler 仍继续接收传入数据。这是怎么回事?

我已经阅读了几篇文章,这是 JDK 中的一个错误,即调用 cancel(true) 方法不会停止 SwingWorker。这是真的吗?

【问题讨论】:

    标签: java swing swingworker


    【解决方案1】:

    @Yakult121 请这不是你Java SwingWorker Socket Server does not get cancelled when i cancel the the SwingWorkerJava SwingWorker - using publish/process to update a TextArea in EDT? 两个问题的答案,我认为你的问题没有完全描述,我错过了很多重要的细节,

    你必须发布更好的代码......,展示你的 Executor、SwingWorker 和取消的实现

    您的代码也可以基于这两个线程

    1/Cancel SwingWorker

    2/Executor And SwingWorker

    3/ 以及您如何/如何确定具体的 SwingWorker 线程以进行取消

    4/ 真的把你的两个线程放在一起

    【讨论】:

    • 嗨 mKorbel,最初他们是同一个问题的一部分。但是在发布另一个线程之后,建议我使用 ExecutorService 来运行套接字服务器,而不是使用 SwingWorker。我现在很困惑。你能帮我理解为什么吗?
    • Yakult121 有关于您的代码,以显示您尝试过的内容,实际上您的两个主题并没有让我有任何想法,也没有人知道您的代码是如何工作的,您的该主题的代码示例应该基于在我发布的链接上,
    • 您好 mKorbel,我一直在玩 Java swing 并找到了答案。我放弃了 SwingWorker 并直接与 Executor 合作。我还没有尝试取消线程。
    【解决方案2】:

    public final boolean cancel(boolean mayInterruptIfRunning) 的 API:

    "mayInterruptIfRunning - true 如果执行此任务的线程应该被中断;否则,允许完成正在进行的任务"。

    你必须阅读Thread.interrupt。它实际上并没有中断任何事情;您必须在代码中指定如何处理中断。

    此外,您的问题还不清楚您是想阻止主要SwingWorker 进行连接还是想终止所有现有连接。

    编辑:如果您在接受连接的线程中有while 循环:

    while (!Thread.interrupted()) {
    

    我想应该足够了。 现在当SwingWorker 被取消时,循环应该停止,因为SwingWorker 线程设置了内部中断标志。

    【讨论】:

    • 大家好,我想阻止主 SwingWorker 进行连接。
    • @Yakult:那么请按照上面几个人的建议将该逻辑放入您的 SwingWorker。
    【解决方案3】:

    只需在循环中添加一个布尔检查器

    if (!stillWorking)return;

    然后您可以将布尔值设置为 false 以停止该方法。

    【讨论】:

    • 大家好,我没有尝试过,因为我正忙于工作。 (我不是全职程序员)。我将在下周对其进行测试并更新您。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2011-09-01
    相关资源
    最近更新 更多