Java Swing应用程序:如何从GUI线程获取数据到另一个线程?

san*_*ris 4 java concurrency swing multithreading

在我的带有Swing GUI的Java应用程序中,我想实现以下目标.

有一个非GUI线程正在运行,执行一些工作.有一次,该线程需要用户输入才能继续.然后,我想对GUI进行一些更改,等待特定的GUI操作(如用户按下OK按钮),将输入的数据从GUI获取到非GUI线程,并让它继续计算.

环顾四周,我发现了很多关于如何从另一个线程上的Swing GUI线程开始执行(长时间运行)任务的信息,但没有解决我的问题.

SwingUtilites.invokeAndWait听起来像它做的工作,但首先,它需要一个Runnable参数而不是一个Callable,所以没有直接的方式来返回结果,其次,它没有解决等待某个GUI事件的问题.

我意识到我可以使用例如a来构建我自己的解决方案CountDownLatch,但对我而言,问题似乎经常出现,以便有一个标准的解决方案.

所以,我的问题是:这真的是一个常见的问题,如果是的话,标准库/库中是否有解决方案?如果没有标准解决方案,您会如何解决?如果这个问题不经常发生,为什么不呢?

Bil*_*ill 6

启动GUI更改很容易,因此我假设您只是要求将数据恢复到工作线程.

首先,创建一个阻止队列.让工作线程调用take()队列,它将阻塞.在GUI空间中,一旦用户输入有效输入,将其放在队列中,offer()工作线程将接收数据并可以继续.