我如何 运行 一个 GUI 文件作为 Java 中另一个 class 的线程?
How do I run a GUI file as a thread from another class in Java?
使用 window 生成器时的默认 GUI 代码如下。
import java.awt.EventQueue;
import javax.swing.JFrame;
public class Goo {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Goo window = new Goo();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Goo() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我想 运行 来自另一个 class 的这个作为一个线程。所以另一个 class 看起来像
public class GooRun {
public static void main(String[] args) {
// TODO Auto-generated method stub
Goo myGoo = new Goo();
Thread myThread = new Thread(myGoo);
myThread.start();
}
}
我不完全理解 运行 方法在您不使用 implements Runnable 或 extends Thread 时如何工作。
我得到的错误是构造函数未定义 Thread(Goo) 未定义。
您可以执行以下两项操作之一:
第一个选项:使 myGoo
实现 Runnable
:
public class Goo implements Runnable{
然后在Goo
中添加一个run
方法:
@Override
public void run() {
try {
Goo window = new Goo();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
之后,你可以像在另一个中那样做 main
:
public static void main(String[] args){
Goo myGoo = new Goo();
Thread myThread = new Thread(myGoo);
myThread.start();
}
基本上,这使得 Goo
成为可以在线程启动时启动的东西(因此实现 Runnable
)。
或
选项 2:在您的 main
中,您可以创建一个可运行的线程:
public static void main(String[] args){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
Goo myGoo = new Goo();
}
});
t.start();
}
ItamarG3 的解决方案 1 实际上是个坏主意。
在那种情况下,您有 2 个 Goo
实例(一个来自 run()
,一个来自 main()
),而您不需要它们。
您应该在 run()
中调用 this.frame.setVisible(true);
而不要 new
另一个 Goo
实例。
使用 window 生成器时的默认 GUI 代码如下。
import java.awt.EventQueue;
import javax.swing.JFrame;
public class Goo {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Goo window = new Goo();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Goo() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我想 运行 来自另一个 class 的这个作为一个线程。所以另一个 class 看起来像
public class GooRun {
public static void main(String[] args) {
// TODO Auto-generated method stub
Goo myGoo = new Goo();
Thread myThread = new Thread(myGoo);
myThread.start();
}
}
我不完全理解 运行 方法在您不使用 implements Runnable 或 extends Thread 时如何工作。
我得到的错误是构造函数未定义 Thread(Goo) 未定义。
您可以执行以下两项操作之一:
第一个选项:使 myGoo
实现 Runnable
:
public class Goo implements Runnable{
然后在Goo
中添加一个run
方法:
@Override
public void run() {
try {
Goo window = new Goo();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
之后,你可以像在另一个中那样做 main
:
public static void main(String[] args){
Goo myGoo = new Goo();
Thread myThread = new Thread(myGoo);
myThread.start();
}
基本上,这使得 Goo
成为可以在线程启动时启动的东西(因此实现 Runnable
)。
或
选项 2:在您的 main
中,您可以创建一个可运行的线程:
public static void main(String[] args){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
Goo myGoo = new Goo();
}
});
t.start();
}
ItamarG3 的解决方案 1 实际上是个坏主意。
在那种情况下,您有 2 个 Goo
实例(一个来自 run()
,一个来自 main()
),而您不需要它们。
您应该在 run()
中调用 this.frame.setVisible(true);
而不要 new
另一个 Goo
实例。