Java - Что не так с этой простой программой? - PullRequest
2 голосов
/ 06 ноября 2011
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();

    }

}

когда я запускаю это на своем компьютере с Ubuntu с помощью eclipse, он останавливается (завершается) без ошибок В консоли также нет ошибок. И никаких синтаксических ошибок.

Что не так? Это потому что я запускаю openjdk?

Ответы [ 4 ]

4 голосов
/ 06 ноября 2011

Вы не устанавливаете свой кадр на видимый setVisible(true)

Вы должны проверить этот учебник: http://download.oracle.com/javase/tutorial/uiswing/components/frame.html

3 голосов
/ 06 ноября 2011

Вы создаете экземпляр Test, но это все.На самом деле вы никогда не пытаетесь показать это.

Если вы позвоните app.setVisible(true), оно отобразится, и вызов заблокируется.

2 голосов
/ 06 ноября 2011

Вам нужно вызвать setVisible (true) для вашего экземпляра Test. Также лучше всего запускать этот код в другом потоке.

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            Test app = new Test();
            app.setVisible(true);
        }
    }
}
1 голос
/ 06 ноября 2011

Добавьте эту строку в конце вашего конструктора:

setVisible(true);

В противном случае JFrame никогда не отображается и программа завершается. Вы можете также раскомментировать бит setDefaultCloseOperation - хотя это не связано с вашей проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...