Кнопки Java GUI иногда не отображаются (случайным образом). Проблема Compiz - PullRequest
2 голосов
/ 23 июня 2011

* EDIT 2 : Я только что обнаружил, что это проблема compiz + java GUI.По-видимому, это происходит там, где эти два элемента пересекаются.Я использую последнюю версию Ubuntu 11.04 (классический рабочий стол, а не Unity) со всеми обновлениями.Проблема возникает как с Sun Java, так и с OpenJDK.Это связано с использованием плагина Window-Rules Compiz - который мне нужно использовать.

Как указано в комментариях ниже, ранее я проверял, что мои элементы управления добавлены в правильную ветку.Теперь я обнаружил, что отключение плагина Compiz Window-Rules решает мою проблему.Поскольку мне нужно использовать плагин, я ищу решение. *

Оригинальный пост: Я работаю над Java-приложением Swing.Он был построен с NetBeans 6.9.Используется менеджер GridBagLayout.Внешний вид в настоящее время Nimbus (но, похоже, это не влияет на проблему, которую я собираюсь описать).Большинство пользователей запускают приложение в Linux.Некоторые используют Windows.В большинстве случаев приложение работает нормально.Но в случайное время вид откроется без некоторых кнопок графического интерфейса.Например, кнопки «Сохранить» и «Отмена» могут отсутствовать.Другие элементы GUI обычно присутствуют (хотя однажды я услышал, что представление было полностью пустым без элементов GUI - просто пустое серое окно).

Если пользователь закрывает это представление с помощью «X»в верхнем углу и просто снова открывает его, он будет нарисован правильно.Проблема с отсутствующими кнопками происходит менее чем в 1% случаев.Последовательность закрытия / открытия фиксирует это почти 100% времени.(Второе закрытие / повторное открытие, возможно, понадобилось один раз, если я правильно помню.)

Как правило, если некоторые кнопки отсутствуют, другие элементы по-прежнему отображаются правильно.Это не влияет на весь вид (форму).Кажется, это влияет на самую нижнюю панель, но я не уверен, что это действительно повторяемый шаблон.Это очень сложно воспроизвести.Я использую программное обеспечение каждый день, и я вижу это менее одного раза в месяц.Некоторые пользователи видят это чаще, но это все еще редко.

Нет сообщений об ошибках.Я понятия не имею, что попробовать дальше.Такое поведение сохраняется на разных компьютерах, в разных дистрибутивах Linux (хотя все они основаны на Debian) и во многих различных изменениях кода, в том числе при изменении менеджера компоновки.(Ранее мы использовали конструктор графического интерфейса NetBeans.) Есть идеи?

РЕДАКТИРОВАТЬ: 2011.07.05 Вот как в целом выглядит код:

public void show_some_view() {
    setTitle(...)
    setLayout(new GridBagLayout());
    JPanel butnPanel = new JPanel();
    butnPanel.setLayout(new GridBagLayout());
    try {
        //add stuff to panels (butnPanel, etc.)
    } catch (Exception e) {
        Logger.log(e);
    }
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    int[] wh = ApplicationContext.get().getDisplayWidthxHeight();
    setSize(wh[0], wh[1]);
    setFocusable(true);
    setVisible(true);
}

Ответы [ 2 ]

5 голосов
/ 23 июня 2011

Но в случайное время вид открывается без некоторых кнопок графического интерфейса.

  1. Убедитесь, что вы добавили кнопки в GUI на EDT. Прочитайте раздел из учебника по Swing на Concurrency для получения дополнительной информации.

  2. Убедитесь, что вы добавляете кнопки в GUI ПЕРЕД вызовом setVisible (true);

0 голосов
/ 19 января 2012

У меня была такая же проблема: иногда мой JMenu не рисовал (также в Ubuntu 11.04). Я исправил это, просто добавив

menuBar.setVisible(false);
menuBar.setVisible(true);

К моему коду, сразу после того, как я добавил его в свой JFrame (который был уже установлен как видимый). Я знаю, что это грязно, но это решило мою проблему, поэтому я в порядке. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...