Мой графический интерфейс не загружается

Я создал графический интерфейс для текстовой игры, которую пытаюсь создать. Я внедрил графический интерфейс в уже работающую игровую механику, но когда я загружаю его, графический интерфейс не появляется. На странице нет ошибок, и 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();
        }

Начни с чего-нибудь простого. Просто создайте JFrame и покажите фрейм. Затем добавьте к рамке одну метку. Делайте один шаг за раз вместо того, чтобы пытаться написать все приложение перед началом тестирования. Затем, когда код перестает работать, вы знаете последнее внесенное вами изменение и можете исправить его или задать конкретный вопрос, почему оно не работает. Я предполагаю, что Сканер вызывает проблему. Блокирует ожидание ввода.

camickr 24.04.2018 18:53

Я создал графический интерфейс в отдельном проекте. Он загрузился там правильно, но когда я попытался добавить его в остальную часть моей игры, когда он не загрузился, блок Try использовался в учебнике, за которым я следил (это для проекта класса)

JavaCoder99 24.04.2018 18:55

Удаление сканера позволило загрузить графический интерфейс

JavaCoder99 24.04.2018 19:00

Вместо использования сканера для чтения из консоли - блокировка ввода-вывода - используйте текстовую область для чтения пользовательского ввода.

M. le Rutte 24.04.2018 19:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Removing the scanner allowed the GUI to load

Таким образом, вы не можете запустить сканер в потоке отправки событий (EDT).

Итак, вам нужно создать еще один Thread для Scanner. Один из способов сделать это - использовать SwingWorkder.

Прочтите раздел руководства по Swing на Параллелизм для получения дополнительной информации о EDT и примере, в котором используется SwingWorker.

Camickr: обратите внимание на его последний вопрос. Похоже на вампира-помощника, который спрашивает, даже не взглянув на учебники.

Hovercraft Full Of Eels 24.04.2018 22:44

И он повторно задал аналогичный вопрос, очень связанный с этим, не признавая вашего вклада. Нехорошо.

Hovercraft Full Of Eels 24.04.2018 22:55

@HovercraftFullOfEels, спасибо, еще один вампир, о котором нужно знать.

camickr 24.04.2018 23:28

Другие вопросы по теме