Почему мой JFrame не отображается, хотя код JFrame выполняется?

Я делал JFrame для своего приложения, которое будет действовать как панель входа в систему. После прохождения класса я заметил пару проблем. Во-первых, eclipse (IDE, которую я использую) показывает, что строка была выполнена. Установка видимого JFrame должна сделать его видимым для пользователя, однако я не вижу его на своем экране. Кроме того, eclipse показывает мне, что процесс все еще выполняется и не завершился с кодом выхода.

Мой LoginPanel.java:

import java.awt.EventQueue;

import javax.swing.JFrame;

public class Test {

    private JFrame frmLogin;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        Test window = new Test();
        window.frmLogin.setVisible(true);
    }

    /**
     * Create the application.
     */
    public Test() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {

        System.out.println("Opening Login Panel");

        frmLogin = new JFrame();
        frmLogin.setTitle("Test");
        frmLogin.setBounds(100, 100, 585, 380);
        frmLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmLogin.setVisible(true);

        System.out.println("Window Loaded In");

    }

}

После некоторых наблюдений я заметил пару вещей. Важно отметить, что когда EventQueue был закомментирован, оператор Logger с «Window Loaded In» был выведен в журнал, что означает, что предыдущие строки кода уже были выполнены. Однако по-прежнему не было показано ни одного окна.

Что я пробовал:

Я попытался добавить утверждение: assert frmLogin.isVisible();, однако в утверждении говорилось, что JFrame виден, что не имеет смысла, поскольку он не отображается на экране. Кажется, что весь код выполняется, но JFrame по-прежнему не отображается, даже если я сделал его видимым, используя два раза frmLogin.setVisible(true); в методе initialize() и методе start().

Он отображается, но действительно крошечный? Вы можете установить размер перед использованием setvisible, чтобы убедиться, что он не слишком мал.

matt 19.07.2019 16:43

Вы используете отладчик? Иногда, если вы находитесь в точке останова, отладчики не позволяют отображать графический интерфейс.

matt 19.07.2019 16:48

@matt Не работает, а также я установил границы 585 на 380, пожалуйста, прочитайте код.

Java Programming19817 19.07.2019 16:49

Установить границы не установить размер. "Не работает" бессмысленно. Процесс заканчивается? Или процесс висит, но вы ничего не видите. Вы можете потратить немного своего времени и сократить все лишнее и просто оставить значимые части. Нам не нужно видеть комментарии.

matt 19.07.2019 16:52

@matt Извини за это. Я отредактировал вопрос и удалил ненужный код. Процесс не закончился, и он выполнился до последней строки кода, но JFrame не появился.

Java Programming19817 19.07.2019 17:03

А как насчет последней строки вашего main, вы полностью проглатываете это исключение. Вы не думали просто удалить его?

matt 19.07.2019 17:14

@JavaProgramming19817JavaProgramming19817 Странно: я удалил все файлы pulsebeat02 и получил пустое окно. В вашем журнале присутствует сообщение «Окно загружено»? Кстати, попробуй убрать свой вызов 'setLookAndField'

C.Champagne 19.07.2019 17:46

Чтобы быстрее получить помощь, редактировать добавьте минимальный воспроизводимый пример или Короткий, автономный, правильный пример. Кстати, PLAF должен быть установлен. Создаются компоненты до. Но PLAF, скорее всего, не имеет отношения к рассматриваемой проблеме, так что уберите его сейчас и исправьте позже.

Andrew Thompson 19.07.2019 17:49

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

Java Programming19817 20.07.2019 04:10

@matt Я уже пытался удалить последнюю строку кода. Тем не менее, JFrame не отображается, и не было выдано никаких исключений, проблем или ошибок.

Java Programming19817 20.07.2019 08:21

Опубликованный код работает (покажите пустой JFrame). Пожалуйста, приведите свой код в порядок, удалив весь закомментированный код, чтобы сделать его более читабельным.

c0der 20.07.2019 09:56

@ c0der Для меня это просто ничего не показывает. Например, посмотрите на ссылку для вставки, которую я вам отправил. Eclipse показал операторы println(), однако окно не было показано. [ссылка] imgur.com/галерея/TFWFVc5 Что-то не так с моей JVM? Я сейчас на Mac, может ли это иметь какое-то отношение к этой проблеме? Кроме того, кстати, я хотел бы «отменить» все минусы, которые я получил. К сожалению, я отредактировал пост, однако он все равно останется на уровне -4.

Java Programming19817 20.07.2019 15:05

1. См. imgur.com/a/julhzuq 2. window.frmLogin.setVisible(true); не требуется. 3. Чтобы избежать -4, удалите вопрос. Если нужно, опубликуйте новый.

c0der 20.07.2019 17:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
13
573
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Хорошие новости, я наконец нашел проблему. Оказывается, библиотека SWT, которую я использовал, каким-то образом мешала JFrame. Его удаление решило проблему и сделало отображение JFrame. Кажется, что у SWT все еще есть много проблем даже после того, как AWT переписал многие классы в JDK 1.7.

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