Java Swing JFrame не работает в Ubuntu

Вопрос или проблема

Я написал следующую программу на Java:

import javax.swing.*;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Тест");
        frame.setSize(new Dimension(800, 600));
        frame.setVisible(true);
    }
}

Однако, когда я запускаю её, иконка появляется в панели слева, но само окно не отображается. Я использую openjdk-8 в данный момент, установленный через apt-get install openjdk-8-jdk. Я также попробовал это с Oracle Java, и это тоже не сработало.

Как мне заставить мой код отображать окно Frame?

Java должна работать везде. Попробуйте загрузить простое Java-приложение из Интернета, чтобы увидеть, работает оно или нет.

Я думаю, вам нужно установить позицию вашего JFrame. Попробуйте
frame.setLocation(x, y);

Это успешно запустилось на моем Ubuntu 20 с jdk-11.
java

Этот ответ на Stack Overflow от mapadj

решил мою проблему:

Если вы установите setResizable false перед установкой границ, у вас не возникнет проблемы. Как уже упоминал Гергей Силаги, вы избавляетесь от полос прокрутки, но размер окна зафиксирован, и в итоге у вас остается 9 или 10 пикселей лишнего пространства в фрейме. У меня была такая же проблема. Спасибо за помощь.

Ответ или решение

Если ваш код Java с использованием Swing не отображает окно JFrame в Ubuntu, вот несколько предложений для решения проблемы.

Полный код

Во-первых, приведённый вами код пропускает вызов метода setDefaultCloseOperation(), что может привести к неожиданному поведению при закрытии окна. Попробуйте следующий улучшенный вариант кода:

import javax.swing.*;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Test");
        frame.setSize(new Dimension(800, 600));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Установка операции закрытия
        frame.setLocationRelativeTo(null); // Центрирование окна
        frame.setVisible(true);
    }
}

Объяснение внесённых изменений:

  1. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) – Этот метод позволяет правильно закрывать приложение по нажатию на крестик в окне. Без него окно может быть закрыто не совсем корректно.

  2. setLocationRelativeTo(null) – Центрирует окно на экране, что может помочь, если окно отображается вне видимой области.

  3. setVisible(true) – Важно вызывать этот метод после настройки всех параметров JFrame.

Дополнительные проверки

Если после внесения этих изменений окно все равно не отображается, рассмотрите следующие пункты:

  1. Проверка установленных библиотек: Убедитесь, что у вас установлены все необходимые библиотеки для работы с графикой, такие как libgtk-3-0 для работы с графическим интерфейсом. Вы можете установить их с помощью следующей команды:

    sudo apt-get install libgtk-3-0
  2. Обновление Java: Вы используете OpenJDK 8, что может быть причиной проблем с совместимостью. Попробуйте обновить до более поздней версии, такой как OpenJDK 11:

    sudo apt-get install openjdk-11-jdk
  3. Проблемы с графическим драйвером: Убедитесь, что ваши графические драйверы обновлены и корректно работают. Попробуйте запустить другую Java-программу с графическим интерфейсом, чтобы проверить общую работоспособность.

  4. Проверка переменных среды: В некоторых случаях значения переменных окружения могут влиять на работу Java-приложений. Убедитесь, что переменная JAVA_HOME указана верно и путь к java добавлен в переменную PATH.

Заключение

Если, несмотря на все вышеперечисленные рекомендации, проблема не устраняется, возможно, стоит рассмотреть использование виртуальной машины или другой среды. Это поможет проверить, не связана ли проблема с конкретной конфигурацией вашего устройства или программного обеспечения.

Оцените материал
Добавить комментарий

Капча загружается...