假设我有一个线程正在运行(我正在创建此线程的许多实例),并在其中实例化JForm
。在JForm
内,我打电话给另一个JForm
。将其视为多步注册流程。当我在第二个表单中时,先前创建的线程是否仍在run()
内?或者是新的JForm
创建一个新线程?我希望第一个线程保持活动状态,并在整个生命周期内访问共享资源。
class Form1 extends JForm{
public void jButton1ActionPerformed(..){
///show Form2
}
}
class A extends Thread{
public void run() {
//show Form1
}
}
class Main {
public static void main(String args[]){
new A().start();
new A().start();
new A().start();
}
感谢。
答案 0 :(得分:1)
当您创建并运行A线程时,您只需显示表单并继续执行该线程。另外,在单个专用的Swing Thread(自动启动)上,用户点击将被捕获并处理,从而调用jButton1ActionPerformed
。该代码块将在Swing线程内执行。
希望有所帮助。请注意,您可以为线程命名,并始终使用Thread.currentThread().getName()
来帮助您进一步了解代码中发生的情况。
答案 1 :(得分:1)
如果要在非EDT线程中创建和显示Swing组件,则必须将Swing代码放在Runnable中并将其排在事件线程上,如下所示:
class A extends Thread{
public void run() {
//show Form1
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Form1 form1 = new Form1();
form1.setVisible(true);
}
});
}
}
因此,无论您创建多少个“A”对象,从而分离您创建的新线程,所有Swing代码都将在同一个线程上运行。