Я создал графический интерфейс для текстовой игры, которую пытаюсь создать. Я внедрил графический интерфейс в уже работающую игровую механику, но когда я загружаю его, графический интерфейс не появляется. На странице нет ошибок, и eclipse запустит остальную часть игры, только ничего, связанного с графическим интерфейсом. (Я добавил весь код для графического интерфейса, но включил только часть игры, чтобы сократить код.) Код ниже:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
DemoGUI inst = new DemoGUI();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public DemoGUI() {
super();
initGUI();
}
public void initGUI() {
try {
FlowLayout thisLayout = new FlowLayout();
getContentPane().setLayout(thisLayout);
setDefaultCloseOperation(EXIT_ON_CLOSE);
jLabel1 = new JTextArea();
getContentPane().add(jLabel1);
jLabel1.setPreferredSize(new Dimension(320, 250));
jLabel1.setBorder(BorderFactory.createLineBorder(Color.BLACK));
jButton1 = new JButton();
getContentPane().add(jButton1);
jButton1.setPreferredSize(new Dimension(100, 50));
jButton1.setText("Map");
jButton1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
}
});
jButton2 = new JButton();
getContentPane().add(jButton2);
jButton2.setPreferredSize(new Dimension(100, 50));
jButton2.setText("Inventory");
jButton2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jText1.setText("Health: " + EAID.CharHealth);
jText1.setText("Number of potions: " + EAID.CharPotionLevel);
jText1.setText("Weapon: ");
jText1.setText("Armor: ");
}
});
jButton4 = new JButton();
getContentPane().add(jButton4);
jButton4.setPreferredSize(new Dimension(100, 50));
jButton4.setText("Return");
jButton4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jLabel1.setText("");
jText1.setText("");
}
});
jText1 = new JTextField();
getContentPane().add(jText1);
jText1.setPreferredSize(new Dimension(320, 100));
jText1.setBorder(BorderFactory.createLineBorder(Color.BLACK));
jButton3 = new JButton();
getContentPane().add(jButton3);
jButton3.setPreferredSize(new Dimension(100, 40));
jButton3.setText("Submit");
jButton3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
jText1.setText("");
jLabel1.setText("THIS IS A TEST");
}
});
//Scanner
Scanner scan = new Scanner(System.in);
//Introduction
jLabel1.setText("Hello adventurer. This is a tale of old, taking place in the long lost kingdom of Asteroth.\r\n" +
"This is a land tormented by the tyranical rule of the Lich King Astotle.\r\n" +
"For centuries he has tormented the citizens, leading to widespread famine and terror throughout the land.\r\n" +
"The story you are about to go on follows the tale of a young hero, on there quest to bring peace to the land.\r\n" +
"But tell me adventurer..");
Это добавляется в самый низ документа перед закрытием классов и основных строк:
pack();
this.setSize(350, 500);
} catch (Exception e) {
e.printStackTrace();
}
Я создал графический интерфейс в отдельном проекте. Он загрузился там правильно, но когда я попытался добавить его в остальную часть моей игры, когда он не загрузился, блок Try использовался в учебнике, за которым я следил (это для проекта класса)
Удаление сканера позволило загрузить графический интерфейс
Вместо использования сканера для чтения из консоли - блокировка ввода-вывода - используйте текстовую область для чтения пользовательского ввода.




Removing the scanner allowed the GUI to load
Таким образом, вы не можете запустить сканер в потоке отправки событий (EDT).
Итак, вам нужно создать еще один Thread для Scanner. Один из способов сделать это - использовать SwingWorkder.
Прочтите раздел руководства по Swing на Параллелизм для получения дополнительной информации о EDT и примере, в котором используется SwingWorker.
Camickr: обратите внимание на его последний вопрос. Похоже на вампира-помощника, который спрашивает, даже не взглянув на учебники.
И он повторно задал аналогичный вопрос, очень связанный с этим, не признавая вашего вклада. Нехорошо.
@HovercraftFullOfEels, спасибо, еще один вампир, о котором нужно знать.
Начни с чего-нибудь простого. Просто создайте JFrame и покажите фрейм. Затем добавьте к рамке одну метку. Делайте один шаг за раз вместо того, чтобы пытаться написать все приложение перед началом тестирования. Затем, когда код перестает работать, вы знаете последнее внесенное вами изменение и можете исправить его или задать конкретный вопрос, почему оно не работает. Я предполагаю, что Сканер вызывает проблему. Блокирует ожидание ввода.