如何在主线程仍在 运行ning 时将线程用于 运行 另一个 JFrame
How to use a thread to run another JFrame while the main is still running
我有一个要显示的 jframe,而我的主框架是 运行。我想暂停我的主要代码,直到用户在另一帧上执行必要的操作。我已经阅读了很多解决方案,但我需要完成它才能让我的代码完全理解和掌握它。我不想像我之前看到的那样使用 jdialog 作为答案。我的主要目标是更好地理解线程,以便我可以在不同的情况下使用我学到的东西。
使用我创建的代码,当 运行 线程时,只有框架加载,none 框架上有其他功能。 (框架很简单,它有一个标签,一个用户从中选择的列表,以及一个基本上 return 所选列表值的按钮。)它就像线程从完成或其他东西中被切断。
这是我的 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;
}
}
在我的主要代码中,调用了一个方法,该方法是 returning 一个 String[] 值,在某些时候使用此方法,我有以下代码调用新线程以获取 return在原来的main方法中:
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()};
没有列出第二帧的整个代码,当用户按下按钮时,在绑定到按钮的侦听器的末尾按下我想关闭框架和 return 一个字符串已从列表中选择:
jf.dispose();
myt.setResult(AdminSelection);
在框架 class 中,我声明了以下实例变量:
String AdminSelection = null;
myThread myt;
我希望这些信息足以帮助我了解这里出了什么问题。
函数 join() 等到 运行() 方法结束,当您执行 t.join() 时,您的线程已经或几乎结束。这是因为在您的 运行() 方法中,在用户单击确认按钮之前不会阻止线程。这样更好!
在这里创建一个线程是没有意义的,你应该使用一个回调,或者更一般地在Java,一个监听器。你可以看看这个 link : https://guides.codepath.com/android/Creating-Custom-Listeners
但是,特别是如果你想暂停你的主要代码,你应该使用为此而制作的 JDialog!不要试图自己阻塞 UI,您可能会错误地阻塞 UI 线程(由 Swing/AWT 处理)。创建一个 JDialog 更好,因为在 UI 线程上已经为这个用法做了一切。
还有,你要知道创建一个Thread真的很长,真正需要的时候再使用一个Thread。
我有一个要显示的 jframe,而我的主框架是 运行。我想暂停我的主要代码,直到用户在另一帧上执行必要的操作。我已经阅读了很多解决方案,但我需要完成它才能让我的代码完全理解和掌握它。我不想像我之前看到的那样使用 jdialog 作为答案。我的主要目标是更好地理解线程,以便我可以在不同的情况下使用我学到的东西。
使用我创建的代码,当 运行 线程时,只有框架加载,none 框架上有其他功能。 (框架很简单,它有一个标签,一个用户从中选择的列表,以及一个基本上 return 所选列表值的按钮。)它就像线程从完成或其他东西中被切断。
这是我的 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;
}
}
在我的主要代码中,调用了一个方法,该方法是 returning 一个 String[] 值,在某些时候使用此方法,我有以下代码调用新线程以获取 return在原来的main方法中:
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()};
没有列出第二帧的整个代码,当用户按下按钮时,在绑定到按钮的侦听器的末尾按下我想关闭框架和 return 一个字符串已从列表中选择:
jf.dispose();
myt.setResult(AdminSelection);
在框架 class 中,我声明了以下实例变量:
String AdminSelection = null;
myThread myt;
我希望这些信息足以帮助我了解这里出了什么问题。
函数 join() 等到 运行() 方法结束,当您执行 t.join() 时,您的线程已经或几乎结束。这是因为在您的 运行() 方法中,在用户单击确认按钮之前不会阻止线程。这样更好!
在这里创建一个线程是没有意义的,你应该使用一个回调,或者更一般地在Java,一个监听器。你可以看看这个 link : https://guides.codepath.com/android/Creating-Custom-Listeners
但是,特别是如果你想暂停你的主要代码,你应该使用为此而制作的 JDialog!不要试图自己阻塞 UI,您可能会错误地阻塞 UI 线程(由 Swing/AWT 处理)。创建一个 JDialog 更好,因为在 UI 线程上已经为这个用法做了一切。
还有,你要知道创建一个Thread真的很长,真正需要的时候再使用一个Thread。