Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Простое Java-Swing приложение подвешивает рабочий стол.  (Прочитано 3454 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн masterlan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Привет, коллеги.
Вот такое простое ява-приложение подвешивает мне рабочий стол на время своего "слипинга".

import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;

public class Test {
   public static void main(String[] args) {
      final Vector vector = new Vector();
      vector.add("Hello");
      final JComboBox jcb = new JComboBox(vector);
      jcb.addPopupMenuListener(new PopupMenuListener(){

         public void popupMenuCanceled(PopupMenuEvent e) {
            System.out.println("Canceled");
         }

         public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
            System.out.println("Will become invisible - start");
            try {
               Thread.sleep(10000);                                          //  ВРЕМЯ СЛИПИНГА +10 секунд, хотя можно и другое задать
            } catch (InterruptedException e1) {
               e1.printStackTrace();
            }
            System.out.println("Will become invisible - stop");
         }

         public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
            System.out.println("Will become visible");
         }});

      final JFrame frame = new JFrame();
      frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      frame.add(jcb);
      frame.pack();
      frame.setVisible(true);
   }
}

Подскажите , где и что "подкрутить" в системе ?

ОС: Ubuntu 8.04 (пробовал Kubuntu 8.04, OpenSUSE 11, Fedora 8, Fedora9)
Рабочий стол: Gnome (пробовал KDE 3.5.9)
JVM: sun 1.6._06 (пробовал open-jdk)
И везде стабильный результат - висим заказанное в слипинге время.

З.Ы. Для тех , кто знает яву и свинги - слипинг в других лисенерах к таком "эффекту" не приводит.
Если вместо слипинга просто поставить точку прерывания в Eclipse,то при её достижении стол повиснет вместе с иклипсом
и только убитие из терминальной сессии отлаживаемого приложения оживляет и иклипс и стол.

Оффлайн аргентум

  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Если не то,то извините, но может это как-то связано с тем что у вас.  Cтавил eclipse, потом удалил, в итоге с java что-то испортилось, и некоторые приложения перестали работать, к примеру некоторые вэб-приложения или Azureus. Хотя eclipse был удалён, java почему-то ещё помнил его. В итоге всё исправилось, когда я удалил полностью все пакеты, в которых есть слово "java", "jre", "jdk", включая конфигурационные файлы, а затем установил их заново. И всё заработало. Пакет ubuntu-restricted-extras устанавливает openjdk, он прекрасно работает, и дело не в этом. Просто возможно у вас java перепутался.

Кстати, хотя я в java не разбираюсь, а только пытался чуть-чуть разобраться, Netbeans мне понравился больше, и после него нет никаких проблем. Там кстати, есть руский язык, и пакет сделан очень качественно, можно прямо с их сайта его скачать.
« Последнее редактирование: 09 Июль 2008, 11:25:36 от qaz »

Оффлайн masterlan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Спасибо за ответ, но он мне пока не помог. Дело в том , что я пробовал много разных вариантов установки-удаления.
Думаю тут что-то на стыке java-gtk-xserver мною недоделывается. Но как-то странно это.
Ставил чистую Ubuntu  с сановской явой, ни в чём не "шаманил". Ставил чистый Eclipse и тоже не шаманил .
Т.е. "решение из коробки", и на тебе, такой диковенный глюк.

На Netbeans я смотрел в очередной раз пару месяцев назад. Да, действительно, пакет очень даже не плох, но для моих нужд он к сожалению не слишком подошёл. Основная претензия к нему - отсутствие возможности применять  классическое "наследование"
при работе с GUI-дизайнером. А также разрекламированный data-base-binding мне показался мягко говоря "странным". Хотя может я и не всё расковырял у них.

Оффлайн аргентум

  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Попробовал это запустил на Убунте и на Windows XP - появляется окошко c "Hello", кликаешь один раз на треугольник справа, выпадает меню, кликаешь второй раз - ждёт чего-то. Одинаково, что на Ubuntu, что на Windows, и в какой системе ни cобран jar-файл, всё одинаково. Может чего-то не хватает?
И пишет чего-то такое:
Will become visible
Will become invisible - start
Will become invisible - stop
Will become visible
Canceled
Will become invisible - start
Will become invisible - stop
Will become visible
Will become invisible - start
Will become invisible - stop
Will become visible
Canceled
« Последнее редактирование: 11 Июль 2008, 01:48:04 от qaz »

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
То что приложение висит понятно. А вот почему весь десктоп ?

Оффлайн masterlan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Приложение зависает потому как в нём написано
Thread.sleep(10000);       
Так "задумано".
 А вот почему при этом "зависает мышка и клавиатура" в Ubuntu ?

ЭТО ВОПРОС !!!

Оффлайн аргентум

  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
А вот почему при этом "зависает мышка и клавиатура" в Ubuntu ?
у меня ничего не зависало...

Оффлайн masterlan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
qaz попробуй ещё разик пожалуйста.
Запусти эту прогу : "появляется окошко c "Hello", кликаешь один раз на треугольник справа, выпадает меню"
перемещаешь мышку на панель задач убунты и пробуешь вызвать любое меню.
Что будет ?
Неужели не зависнет на несколько секунд ?

Оффлайн аргентум

  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Помню, что мышка не зависала, и у окна можно было изменить размер, его можно было свернуть, развернуть, развернуть на весь экран, пока само окошко чего-то ждало, можно было заниматься чем-то другим... короче, ничего не зависало. Вечером повнимательней за этим понаблюдаю. Никаких отличий в Windows XP и в Ubuntu я не заметил.
А у вас другие java приложения нормально запускаются? К примеру, Azureus 2.5.0.4 (который в репозитории есть). Возможно, проблема именно в линукс-версии eclipse или в его java.

Оффлайн masterlan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Проблема не в эклипсе и не в "его" яве.
Я запускаю эту прогу-пример вообще из командной строки.
И яв (как и "осей") я перепробовал кучу всяких. Все "другие"  ява-приложения везде работают без проблем.
Вечером повнимательней за этим понаблюдай и ОБЯЗАТЕЛЬНО сделай как написано
запусти эту прогу, появится окошко c "Hello", кликаешь один раз на треугольник справа, выпадает меню,
быстро перемещаешь мышку на панель задач убунты и пробуешь вызвать любое убунтовское меню.
Если не заставлять меню тестовой ява-проги  выпасть то у его окна можно  изменить размер, его можно  свернуть, развернуть, развернуть на весь экран.
Расскажи потом, что получилось.

Удачи

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Проверил в  Ubuntu 7.10 на LTSP клиенте.

Интересная вещь получилась.
Сначала вроде казалось metacity зависал, а потом нет.
Даже две копии стартовал одновременно.
Но у меня тормоза по сети. Тем не менее за десять секунд sleep'а мышка двигалась, панель реагировала.

JDK из репов правда не шестая
java version "1.5.0_13"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05)
Java HotSpot(TM) Client VM (build 1.5.0_13-b05, mixed mode, sharing)


Оффлайн аргентум

  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Вечером повнимательней за этим понаблюдай и ОБЯЗАТЕЛЬНО сделай как написано
запусти эту прогу, появится окошко c "Hello", кликаешь один раз на треугольник справа, выпадает меню,
быстро перемещаешь мышку на панель задач убунты и пробуешь вызвать любое убунтовское меню.
Если не заставлять меню тестовой ява-проги  выпасть то у его окна можно  изменить размер, его можно  свернуть, развернуть, развернуть на весь экран.
Расскажи потом, что получилось.
Всё сделал. Убунтовские меню не открываются, хотя мышка двигается, но этой мышкой ничего не сделать. Горячие клавиши тоже не работают. Кстати, если поставить время прерывания 10 мс, то всё работает как раз как надо.
« Последнее редактирование: 11 Июль 2008, 19:49:50 от qaz »

Оффлайн masterlan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Проверил jdk 1.5 из репозитария - под ней всё работает без зависаний.
Что же это так с 1.6 обошлись неаккуратно ? :(
Эх САН-САН ...

 

Страница сгенерирована за 0.093 секунд. Запросов: 25.