【发布时间】:2019-05-10 18:06:06
【问题描述】:
我有一个 jframe,我想在我的主框架运行时显示。我想暂停我的主要代码,直到用户在另一帧上执行必要的操作。我已经阅读了很多解决方案,但我需要看到它完成了我的代码才能完全理解和掌握它。我不想像以前看到的那样使用 jdialog 作为答案。我的主要目标是更好地理解线程,以便我可以在不同情况下使用我学到的东西。
使用我创建的代码,在运行线程时,只加载框架,框架上没有其他功能。 (框架很简单,它有一个标签,一个用户从中选择的列表,以及一个基本上返回所选列表值的按钮。)它就像线程被切断完成或其他东西。
这是我的班级调用屏幕:
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()};
没有列出第二帧的整个代码,当用户按下按钮时,在绑定到按钮的侦听器的末尾按下我想关闭框架并返回从列表中选择的字符串:
jf.dispose();
myt.setResult(AdminSelection);
在框架类中,我声明了以下实例变量:
String AdminSelection = null;
myThread myt;
我希望这些信息足以帮助我了解这里出了什么问题。
【问题讨论】:
-
你应该把框架“跑”的想法抛在脑后。框架响应事件。通常,当您看到帧中发生的事情时,如果它不是由用户输入驱动(例如,通过鼠标点击或键盘按下),那么它可能是由 timer events 驱动的。
-
在 Swing 框架中,事件由框架的事件调度线程(也称为 EDT)调用您注册的处理程序方法来传递。 Swing 的大多数方法不是线程安全的,它们不应该被任何其他线程调用。
标签: java multithreading jframe