为什么我的jframe不会出现?

时间:2014-09-14 16:40:15

标签: java swing jframe

我正在尝试显示一个简单的jframe,我最终将画布放入渲染3d对象。去年我构建了两个使用jframe的GUI程序,我看过它们并且它们工作正常,但我无法弄清楚为什么在运行程序时没有任何反应。这是我的代码:

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

public class Hello3d extends JFrame
{
    JFrame frame;
    JLabel label;

    public Hello3d()
    {
        frame = new JFrame("This is a jframe, YAAAYYYY!!!!");
        frame.setSize( 600, 400 );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

        frame.setLayout( new BorderLayout() );
        label = new JLabel("This is where i put somthing 3d");
        frame.add( label );
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        new Hello3d();
    }
}

1 个答案:

答案 0 :(得分:3)

在这里,看看这是否有效。请注意主要方法,因为Swing GUI或任何GUI因此必须在其自己的主题中运行,而不是main。此外,不要手动设置大小,而是考虑调用frame.pack(),这将在计算出包含在此容器中的组件大小后,在良好意义上创建JFrame

尝试使用JFrame.DISPOSE_ON_CLOSE over JFrame.EXIT_ON_CLOSE,因为后者非常类似于使用System.exit(0),它只会杀死应用程序,尽管前者会慷慨地等待所有守护程序线程在实际JVM关闭之前停止。

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

public class HelloFrame {
    private void displayGUI() {
        JFrame frame = new JFrame("Hello Frame Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        JLabel label = new JLabel(
            "This is where I put something 3D", JLabel.CENTER);
        contentPane.add(label);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                new HelloFrame().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}