gpt4 book ai didi

java - 如何在主线程仍在运行时使用线程运行另一个 JFrame

转载 作者:行者123 更新时间:2023-12-02 05:47:26 25 4
gpt4 key购买 nike

我有一个 jframe,想在主框架运行时显示。我想暂停我的主代码,直到用户在另一个框架上执行必要的操作。我已经阅读了很多解决方案,但我需要看到它的完成,以便我的代码能够完全理解和掌握它。我不想使用 jdialog 就像我之前看到的作为答案列出的那样。我的主要目标是更好地理解线程,以便我可以在不同的情况下使用我学到的东西。

使用我创建的代码,运行线程时,仅加载框架,框架上不存在任何其他功能。 (框架很简单,它有一个标签,一个用户从中选择的列表,以及一个基本上返回所选列表值的按钮。)就像线程被切断以完成或其他什么一样。

这是我的类(class)调用屏幕:

public class myThread implements Runnable {

String result = null;

public void run() {
MessageScreen ms = new MessageScreen();
ms.setVisible(true);
}

public String getResult() {
return result;
}

public void setResult(String AS) {
result = AS;
}

}

在我的主代码中,调用一个返回 String[] 值的方法,在某个时刻,使用此方法,我有以下代码调用新线程以获取在原始主方法中返回所需的值:

    myThread mt = new myThread();
Thread t = new Thread(mt);
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
myreturn = new String[] {"true", mt.getResult()};

在没有列出第二帧的完整代码的情况下,当用户按下按钮时,并且在绑定(bind)到按钮的监听器末尾按下我想要关闭帧并返回从列表中选择的字符串:

jf.dispose();
myt.setResult(AdminSelection);

在框架类中,我声明了以下实例变量:

String AdminSelection = null;
myThread myt;

我希望这些信息足以让某人帮助我并了解这里出了什么问题。

最佳答案

函数 join() 会等待 run() 方法结束,当您执行 t.join() 时,您的线程已经或即将结束。这是因为在您的 run() 方法中,在用户单击确认按钮之前没有任何东西会阻止线程。而且这样更好!

在这里创建线程是没有意义的,您应该使用回调,或者更一般地在 Java 中,使用监听器。您可以看一下Creating Custom Listeners .

<小时/>

但是,特别是如果您想暂停主代码,您应该使用为此而设计的(模态)JDialog!不要尝试自己阻止 UI,您可能会错误地阻止 UI 线程(由 Swing/AWT 处理)。创建 JDialog 会更好,因为 UI 线程上的所有内容都已准备好用于此用途。

另外,你必须知道创建Thread是很长的,当你真正需要的时候才使用Thread

关于java - 如何在主线程仍在运行时使用线程运行另一个 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56082763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com