繁体   English   中英

涉及GUI时,程序立即终止

[英]Program terminates immediately when GUI's are involved

尝试在Eclipse中运行以下代码时,它几乎立即终止,没有消息(仅退出值为-1073740940),但是任何不包含GUI元素的Java代码都可以正常运行。 使用调试器运行时,它到达“新的Runnable”行,然后终止,但GUI窗口从不显示。 GUI之前工作得很好,但是它们在某个时候停止工作了,我不知道为什么。

import java.awt.*;
import javax.swing.*;

public class Test {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Wat wat = new Wat("Test");
                wat.init();
                System.out.println("wat");
            }
        });
    }
}

@SuppressWarnings("serial")
class Wat extends JFrame {
    public Wat(String title) {
        super(title);
    }

    public void init() {
        JPanel p = new JPanel();
        this.setContentPane(p);

        p.add(new JLabel("Why?"));

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(600, 500);
        this.setVisible(true);
    }
}

main方法的代码应如下所示

public class Test {
    public static void main(String[] args) {
        Wat wat = new Wat("Test");
        wat.init();
        System.out.println("wat");
    }
}

只需在主线程上运行UI代码。 使用单独的线程进行从UI开始的长时间运行的操作。 请参阅SwingWorker教程。

我在Wat类的init方法中切换了几行,并向Wat类添加了serialVersionUID。

每次我运行此代码时,都会启动一个GUI。

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Wat wat = new Wat("Test");
                wat.init();
                System.out.println("wat");
            }
        });
    }
}

class Wat extends JFrame {

    private static final long   serialVersionUID    = 
            8993350484858673399L;

    public Wat(String title) {
        super(title);
    }

    public void init() {
        JPanel p = new JPanel();
        p.add(new JLabel("Why?"));

        this.setContentPane(p);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(600, 500);
        this.setVisible(true);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM