小编Yee*_*haw的帖子

SwingWorker结束,PropertyChangeListener监听,但我如何回到EDT?

我已经在这个主题上浏览过很多线索,但似乎没有什么能适合我的具体情况.

我有一个swing应用程序,它分析QR-Codes,提取找到的loginNames并进行DB调用以获取该用户的数据.为了确保可以取消QR码的捕获并且在捕获时仍然可以访问我的应用程序,我使用SwingWorker来实现此目的.到目前为止一切正常,我已经包含了一个PropertyChangeListener,因此应用程序知道我的SwingWorker何时成功读取代码.但是因为我不想将PropertyChangeListener作为我的mainClass中的嵌套类(为了保持结构良好),我在外面为它创建了一个新类.现在我想从这个PropertyChangeListener类返回到我的主类,切换到显示获取数据的相应面板.我有不同的代码可以读取,所以根据代码我有不同的面板切换到(所以我不能一遍又一遍地静态切换到同一个面板).那么如何委托PropertyChangeListener将控件返回给我的EDT呢?我已经尝试使用wait()和notify()让我的EDT知道SwingWorker完成了.但显然wait()会阻止我的EDT并且使用SwingWorker毫无意义.

我希望我能够详细解释我的问题,你们中的一些人有一个好主意来解决这个问题.对于任何代码片段,请询问,然后我会添加必要的代码片段.但由于我的项目有点复杂,我只会发布要求的内容.

在此先感谢任何帮助:)

编辑:这是一段代码摘录,用于说明我的SwingWorker正在做什么.

SwingWorker类:

public class CodeDetector extends SwingWorker<byte[], String> {

String s;                     // read String
byte[] completeCode;          // byte[] which is returned by doInBackground()
BufferedImage resizedImg;
IplImage img;
JLabel labelForStream;
JLabel result;
FrameGrabber grabber = new VideoInputFrameGrabber();     // using JavaCV.


public CodeDetector(JLabel labelForStream, JLabel result) {
    this.labelForStream = labelForStream;
    this.resultLabel = result;
}

@Override
protected byte[] doInBackground() throws Exception {
    try {
        grabber.start();         // 
        while (true) {
            // End if current thread was canceled.
            if (Thread.currentThread().isInterrupted()) { …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading swingworker

2
推荐指数
1
解决办法
4462
查看次数

标签 统计

java ×1

multithreading ×1

swing ×1

swingworker ×1