#java #user-interface #terminate
#java #пользовательский интерфейс #прекратить
Вопрос:
При попытке запустить следующий код в Eclipse он завершается почти сразу без сообщения (только то, что значение выхода равно -1073740940), но любой java-код, который не содержит элементов GUI, работает нормально. При запуске с помощью отладчика он достигает строки «new Runnable», а затем завершается, но окно графического интерфейса никогда не появляется. Графические интерфейсы некоторое время назад работали нормально, но в какой-то момент они перестали работать, и я понятия не имею, почему.
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);
}
}
Ответ №1:
Код для метода main должен выглядеть следующим образом
public class Test {
public static void main(String[] args) {
Wat wat = new Wat("Test");
wat.init();
System.out.println("wat");
}
}
Просто запустите код пользовательского интерфейса в основном потоке. Используйте отдельные потоки для длительных операций, запущенных из пользовательского интерфейса. См. Руководство по SwingWorker.
Комментарии:
1. Да, происходит то же самое
2. Вы используете неправильный файл или что-то в этом роде. Код правильный.
3. Определенно не запускаю неправильный файл, просто по какой-то причине он ничего не делает. Если я добавлю println перед созданием графического интерфейса, который отображается в консоли, но графический интерфейс по-прежнему отсутствует, поэтому код выполняется.
Ответ №2:
Я поменял местами пару строк в методе инициализации класса Wat и добавил serialVersionUID в класс Wat.
Этот код вызывает графический интерфейс каждый раз, когда я его запускаю.
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);
}
}