Тупиковая ситуация IDE NetBeans

#netbeans #deadlock #gui-builder

#netbeans #тупиковая ситуация #графический интерфейс-конструктор

Вопрос:

Я уже обращался к сообществу NetBeans по сообщению об ошибках, прежде чем кто-либо укажет мне туда. У них нет решения.

В каждой используемой мной среде IDE NetBeans (у меня есть 4 версии (6.9, 6.9.1, 7.0 и последняя экспериментальная сборка) на нескольких компьютерах) они последовательно и предсказуемо переходят в тупик всякий раз, когда я открываю GUI builder для класса (JFrame, JDialog и Panel), если только это не первый раз, когда был открыт GUI builder класса. Кто-нибудь еще сталкивался с этой проблемой? Если да, нашли ли вы способ это исправить?

Причина


Я обнаружил причину, но до сих пор не нашел решения: в BHFrame методе initComponents() класса моей библиотеки запущен новый поток, который расширяется JFrame и использует NetBeans GUI Builder. NetBeans пытается запустить этот метод при попытке создать графический интерфейс в конструкторе и блокируется в бесконечном цикле ожидания. NetBeans сообщает об этом во время сброса потока:

 Found one Java-level deadlock:
=============================
"BHFrame.initComponents():  Setting up custColorsEditDialog":
  waiting to lock monitor 0x089178d4 (object 0x1ae148f8, a
javax.swing.MultiUIDefaults),
  which is held by "AWT-EventQueue-1"
"AWT-EventQueue-1":
  waiting to lock monitor 0x0868f6ec (object 0x1a310f18, a
java.awt.Component$AWTTreeLock),
  which is held by "BHFrame.initComponents():  Setting up custColorsEditDialog"
  

Комментарии:

1. она когда-нибудь выходит из тупика? Я знаю, вы сказали, что уже просмотрели список ошибок NB, но посмотрите, поможет ли вам этот отчет об ошибке

2. Этого не происходит, отсюда и термин «Взаимоблокировка». Однажды я даже оставил ее запущенной на полтора дня. Она все еще была заморожена. — Кроме того, посмотрите на электронную почту пользователя, который отправил ее. Это я.

3. Итак, позвольте мне прояснить, конструктор графического интерфейса вызывает ваш библиотечный класс, который порождает поток и вызывает конструктор графического интерфейса? Я не очень удивлен, что это приводит к взаимоблокировке, если это так.

4. Похоже, что при запуске GUI builder он просматривает initComponents() метод моего BHFrame класса и пытается его запустить. В рамках этого метода появляется новый поток (с именем BHFrame.initComponents(): Setting up custColorsEditDialog ), и он сообщает потоку AWT-EventQueue-1 дождаться завершения BHFrame.initComponents(): Setting up custColorsEditDialog потока, который, в свою очередь, ожидает завершения AWT-EventQueue-1 потока, и они застревают в взаимоблокировке. NetBeans не будет отвечать, пока оба потока не завершатся и не приведут к взаимоблокировке.

Ответ №1:

Я удалил новый поток, созданный в initComponents() методе, и через некоторое время все вернулось к нормальной жизни.