#java #swing #jframe
#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();
}
}
когда я запускаю это на своем компьютере Ubuntu с eclipse, оно останавливается (завершается) без каких-либо ошибок. В консоли также нет ошибок. И никаких синтаксических ошибок.
Что не так? Это потому, что я запускаю openjdk?
Ответ №1:
Вы не устанавливаете свой фрейм на видимый setVisible(true)
Вам следует ознакомиться с этим руководством:http://download.oracle.com/javase/tutorial/uiswing/components/frame.html
Комментарии:
1. 1 за самую важную информацию во всех ответах: ссылка на руководство.
Ответ №2:
Вы создаете экземпляр Test, но это все. На самом деле вы никогда не пытаетесь показать это.
При вызове app.setVisible(true)
она отобразится, а вызов заблокируется.
Ответ №3:
Вам нужно вызвать setVisible (true) в вашем тестовом экземпляре. Также лучше всего запускать этот код в другом потоке.
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
Test app = new Test();
app.setVisible(true);
}
}
}
Ответ №4:
Добавьте эту строку в конец вашего конструктора:
setVisible(true);
В противном случае JFrame
никогда не отображается и программа завершается. Возможно, вы также захотите раскомментировать setDefaultCloseOperation
бит, хотя это не имеет отношения к вашей проблеме.