Я делал 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().
Вы используете отладчик? Иногда, если вы находитесь в точке останова, отладчики не позволяют отображать графический интерфейс.
@matt Не работает, а также я установил границы 585 на 380, пожалуйста, прочитайте код.
Установить границы не установить размер. "Не работает" бессмысленно. Процесс заканчивается? Или процесс висит, но вы ничего не видите. Вы можете потратить немного своего времени и сократить все лишнее и просто оставить значимые части. Нам не нужно видеть комментарии.
@matt Извини за это. Я отредактировал вопрос и удалил ненужный код. Процесс не закончился, и он выполнился до последней строки кода, но JFrame не появился.
А как насчет последней строки вашего main, вы полностью проглатываете это исключение. Вы не думали просто удалить его?
@JavaProgramming19817JavaProgramming19817 Странно: я удалил все файлы pulsebeat02 и получил пустое окно. В вашем журнале присутствует сообщение «Окно загружено»? Кстати, попробуй убрать свой вызов 'setLookAndField'
Чтобы быстрее получить помощь, редактировать добавьте минимальный воспроизводимый пример или Короткий, автономный, правильный пример. Кстати, PLAF должен быть установлен. Создаются компоненты до. Но PLAF, скорее всего, не имеет отношения к рассматриваемой проблеме, так что уберите его сейчас и исправьте позже.
@C.Champagne После редактирования всего кода и удаления ненужных строк кода и того, чтобы оставшийся код по-прежнему воспроизводил ошибку, у меня остался приведенный выше код, который по-прежнему воспроизводит проблему с неотображаемым окном. Я сделал код доступным для выполнения программистами без других моих занятий.
@matt Я уже пытался удалить последнюю строку кода. Тем не менее, JFrame не отображается, и не было выдано никаких исключений, проблем или ошибок.
Опубликованный код работает (покажите пустой JFrame). Пожалуйста, приведите свой код в порядок, удалив весь закомментированный код, чтобы сделать его более читабельным.
@ c0der Для меня это просто ничего не показывает. Например, посмотрите на ссылку для вставки, которую я вам отправил. Eclipse показал операторы println(), однако окно не было показано. [ссылка] imgur.com/галерея/TFWFVc5 Что-то не так с моей JVM? Я сейчас на Mac, может ли это иметь какое-то отношение к этой проблеме? Кроме того, кстати, я хотел бы «отменить» все минусы, которые я получил. К сожалению, я отредактировал пост, однако он все равно останется на уровне -4.
1. См. imgur.com/a/julhzuq 2. window.frmLogin.setVisible(true); не требуется. 3. Чтобы избежать -4, удалите вопрос. Если нужно, опубликуйте новый.




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