Java - 这个简单的程序有什么问题?

时间:2011-11-06 14:28:56

标签: java swing jframe

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class Test extends JFrame{

    JLabel label = new JLabel("Leann will come again");
    JButton yesButton = new JButton("Yes");
    JButton noButton = new JButton("Yes");
    JPanel panel = new JPanel();

    public Test(){

        panel.add(label);
        panel.add(yesButton);
        panel.add(noButton);
        add(panel);
        //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addAction();

    }

    public void addAction(){
        yesButton.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                JOptionPane.showMessageDialog(null, "Are you sure?");               
            }

        });

        noButton.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                JOptionPane.showMessageDialog(null, "Too bad!");                
            }

        });
    }

    public static void main(String args[]){
        Test app = new Test();

    }

}

当我在带有eclipse的ubuntu计算机上运行它时,它会停止(终止)而没有任何错误。控制台中也没有错误。并且没有语法错误。

出了什么问题?是因为我运行openjdk吗?

4 个答案:

答案 0 :(得分:4)

您没有将框架设置为可见setVisible(true)

您应该查看本教程:http://download.oracle.com/javase/tutorial/uiswing/components/frame.html

答案 1 :(得分:3)

你正在创建一个Test实例,但就是这样。你实际上从未尝试显示它。

如果您拨打app.setVisible(true),则会显示,并且通话将被阻止。

答案 2 :(得分:2)

您需要在Test实例上调用setVisible(true)。最好在另一个线程中运行此代码。

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            Test app = new Test();
            app.setVisible(true);
        }
    }
}

答案 3 :(得分:1)

在构造函数的末尾添加此行:

setVisible(true);

否则JFrame永远不会显示,程序退出。您可能也希望取消注释setDefaultCloseOperation位 - 尽管这与您的问题无关。