Что может привести к тому, что JVM заблокирует щелчок мышью и ввод с клавиатуры для машины? - PullRequest
1 голос
/ 23 марта 2012

Я использую Java 6 на компьютере с Linux (RHEL 5), и моя программа иногда блокирует ввод данных на компьютер. Никакие щелчки мыши или нажатия клавиш не работают. Как ни странно, курсор мыши можно перемещать, и команда CTRL + ALT + F2 работает (хотя она не вызывает терминал).

Использование top и jvisualvm Я не вижу утечек памяти или других проблем с процессом. Однако единственный способ разморозить компьютер - это ssh с другого компьютера и уничтожение процесса Java. Что может быть причиной такого поведения?

Иногда я могу воспроизвести его, опустив потолок памяти. Кажется, здесь может быть тупик:

"Java2D Disposer" daemon prio=10 tid=0xae7d6800 nid=0x4451 in Object.wait() [0xae6ad000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0xb3253070> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
    - locked <0xb3253070> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
    at sun.java2d.Disposer.run(Disposer.java:127)
    at java.lang.Thread.run(Thread.java:662)

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Симптомы, которые вы описываете, кажутся мне невыпущенным захватом клавиатуры и указателя X11.Это может быть легко вызвано ошибкой или не отвечающим графическим интерфейсом -> слой X11.Внимательно проверьте вашу ветку GUI.

1 голос
/ 23 марта 2012

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

Вы можете проверить это, запустив jstackили JConsole и ищите трассировку стека для «AWT EventQueue».

Другой альтернативой является то, что вы выполняете законную задачу пользовательского интерфейса, но у вас есть недостатки в базовом коде.Например, вы, возможно, определили JTable, содержащий 1000 000 строк, и основали подчеркивание TableModel на LinkedList, что привело к O (n) доступу на строку.

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