当尝试在Eclipse中运行以下代码时,它几乎立即终止而没有消息(只有退出值为-1073740940),但任何不包含GUI元素的java代码都运行正常。当使用调试器运行它到达'new 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);
}
}
答案 0 :(得分:0)
main方法的代码应如下所示
public class Test {
public static void main(String[] args) {
Wat wat = new Wat("Test");
wat.init();
System.out.println("wat");
}
}
只需在主线程上运行UI代码即可。从UI启动的长时间运行操作使用单独的线程。请参阅SwingWorker的教程。
答案 1 :(得分:0)
我在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);
}
}