0

我正在使用 actionListener 来触发一系列事件,最后调用此代码:

public class ScriptManager {

public static Class currentScript;
private Object ScriptInstance;
public int State = 0;
// 0 = Not Running
// 1 = Running
// 2 = Paused

private Thread thread = new Thread() {
    public void run() {
        try {
            currentScript.getMethod("run").invoke(ScriptInstance);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
};

public void runScript() {
    try {
        ScriptInstance = currentScript.newInstance();
        new Thread(thread).start();
        State = 1;
        MainFrame.onPause();
    } catch (Exception e) {
        e.printStackTrace();
    }
}   

public void pauseScript() {
    try {
        thread.wait();
        System.out.println("paused");
        State = 2;
        MainFrame.onPause();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void resumeScript() {
    try {
        thread.notify();
        System.out.println("resumed");
        State = 1;
        MainFrame.onResume();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void stopScript() {
    try {
        thread.interrupt();
        thread.join();
        System.out.println("stopped");
        State = 0;
        MainFrame.onStop();
    } catch (Exception e) {
        e.printStackTrace();
    }
 }
}

可运行对象已创建并运行,但是当我尝试使用任何其他方法时会出现问题,它们会锁定我的 UI。(我假设这是因为我在 EDT 上运行它)有谁知道如何解决这个问题?

4

1 回答 1

1

这不是您使用waitand的方式notify。它们需要在您尝试暂停和恢复的线程上执行。这意味着您需要以某种方式向另一个线程发送消息。有多种方法可以做到这一点,但是另一个线程需要监听这个消息,或者至少偶尔检查一下。

于 2013-11-09T20:51:00.460 回答