java - 如何在 Java 中将 GUI 文件作为另一个类的线程来运行?

标签 java multithreading swing user-interface runnable

使用窗口生成器时的默认 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);
}
}

我想从另一个类作为线程运行它。所以另一个类看起来像,

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时,我不完全理解run方法是如何工作的。

我得到的错误是构造函数未定义 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(); 
}

关于java - 如何在 Java 中将 GUI 文件作为另一个类的线程来运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41173225/

相关文章:

java - log4j如何自初始化

c++ - 在 QT/C++ 中在后台启动并运行一个类成员函数

Java Swing : Jtable Highlight ONLY part of a word in a cell

java - 如何在 Android 5.x (Lollipop) 上以编程方式为 Wi-Fi 连接配置静态 IP 地址、网络掩码、网关、DNS

java - Sonarqube 不分析父类(super class) equals 并可能对 NPE 产生误报

java - PhoneGap 1.0 android facebook 插件登录失败

java - 处理选择器键的最佳方法是什么?

c - printf保存keepalive定时器

java - 为什么我不能使用 Graphics 在 JPanel 上绘画?

java - 使用 Java 使用来自 RESTful Web 服务的 json 字符串结果填充 jtable