使线程在 EDT 中的非 EDT(事件调度线程)线程上运行

发布于 2024-08-24 13:56:40 字数 369 浏览 6 评论 0原文

我有一个在 EDT 上运行的方法,我想让它在新的(非 EDT)线程上执行某些操作。我当前的代码如下:

@Override
    public void actionPerformed(ActionEvent arg0) {
//gathering parameters from GUI

//below code I want to run in new Thread and then kill this thread/(close the JFrame)
new GameInitializer(userName, player, Constants.BLIND_STRUCTURE_FILES.get(blindStructure), handState);
}

I have a method running on the EDT and within that I want to make it execute something on a new (non EDT) thread. My current code is follows:

@Override
    public void actionPerformed(ActionEvent arg0) {
//gathering parameters from GUI

//below code I want to run in new Thread and then kill this thread/(close the JFrame)
new GameInitializer(userName, player, Constants.BLIND_STRUCTURE_FILES.get(blindStructure), handState);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

︶ ̄淡然 2024-08-31 13:56:40

您可以使用 SwingWorker 在 EDT 之外的工作线程上执行任务。

例如,

class BackgroundTask extends SwingWorker<String, Object> {
    @Override
    public String doInBackground() {
        return someTimeConsumingMethod();
    }

    @Override
    protected void done() {
        System.out.println("Done");
    }
}

无论你怎么称呼它:

(new BackgroundTask()).execute();

You can use SwingWorker to undertake a task on a worker thread off the EDT.

E.g.

class BackgroundTask extends SwingWorker<String, Object> {
    @Override
    public String doInBackground() {
        return someTimeConsumingMethod();
    }

    @Override
    protected void done() {
        System.out.println("Done");
    }
}

Then wherever you call it:

(new BackgroundTask()).execute();
棒棒糖 2024-08-31 13:56:40

您可以创建并启动一个新的 Java 线程,该线程从 EDT 线程内执行您的方法:

@Override
    public void actionPerformed(ActionEvent arg0) {

        Thread t = new Thread("my non EDT thread") {
            public void run() {
                //my work
                new GameInitializer(userName, player, Constants.BLIND_STRUCTURE_FILES.get(blindStructure), handState);
            }

        };
        t.start();
    }

You can create and start a new Java Thread that executes your method from within the EDT thread :

@Override
    public void actionPerformed(ActionEvent arg0) {

        Thread t = new Thread("my non EDT thread") {
            public void run() {
                //my work
                new GameInitializer(userName, player, Constants.BLIND_STRUCTURE_FILES.get(blindStructure), handState);
            }

        };
        t.start();
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文