Подтвердить что ты не робот

"Некомпилируемый исходный код" RuntimeException в netbeans

Я пытаюсь помочь другому разработчику, который использует Netbeans. Когда он запускает или отлаживает какой-либо код его в Netbeans (6.9.1), он получает "Некомпилируемый исходный код" RuntimeException. Я довольно опытна на Java, но я больше привык к IntelliJ и вообще не использовал Netbeans.

Я немного поработал с поисковой системой, и, похоже, Netbeans будет компилировать код даже с ошибками, а затем выбросить RuntimeException при ошибках. (Очень плохое поведение IMO, но я думаю, что некоторые из них сочтут это полезным.) Я попросил его полностью перестроить проект без ошибок компиляции, но RuntimeException по-прежнему происходит. Я предполагаю, что он получил некоторые плохие кэшированные данные класса где-то глубоко внутри Netbeans.

2 вопроса:

  • Каков наилучший способ очистки кеша, чтобы мы могли узнать, где находится несовместимый код?
  • Есть ли способ отключить это поведение, чтобы код не запускался/отлаживался, если все не будет компилироваться, поэтому эти RuntimeException не будут введены в код?

Я искал хороший бит, но еще не нашел ответа на любой из этих вопросов.


Обновление: Дополнительная информация:

  • Отключение опции "скомпилировать при сохранении" заставляет проблему уйти. Возврат CoS снова возвращает исключение. К сожалению, это не проблема, так как CoS - очень полезный вариант.
  • http://netbeans.org/bugzilla/show_bug.cgi?id=182009 кажется самым близким сообщением об ошибке, но он был закрыт как "ПОСТАНОВИЛСЯ НЕПОЛНЫЙ". К сожалению, ошибка трудно воспроизвести - исключение происходит в коде библиотеки Java, когда он вызывает стороннюю библиотеку, поэтому в этой ситуации не возникает ничего, что может быть изменено. И код будет работать неделями, а затем внезапно начнет бросать эту ошибку без видимых причин.
  • Мы попытались вручную удалить весь каталог сборки - все еще не исправление.
4b9b3361

Ответ 1

Наконец, мы получили решение, но до сих пор не совсем знаем, почему происходит ситуация. Когда у вас включена функция "Скомпилировать включено", Netbeans генерирует второй набор файлов классов для отладки и т.д. Они хранятся в $USER/.netbeans/var/cache/index/s*/java/*/classes

Как-то (не уверен, как) этот каталог может быть поврежден или не обновиться.

Если вы закрываете netbeans, удалите $USER/.netbeans/var/cache/index и все подкаталоги и перезапустите netbeans, это очистит кеш. Если у вас нет ошибок компиляции, ваша проблема должна исчезнуть в данный момент.

NB: $USER - это ваш каталог пользователя - в Windows 7 это обычно c:\Users\username, я думаю, что в Unix это будет ~username.

Если вы получите эту проблему, проголосуйте за, прокомментируйте или добавьте информацию: http://netbeans.org/bugzilla/show_bug.cgi?id=182009

Ответ 2

В NB 7.0.1 я столкнулся с одной и той же проводной проблемой, мое решение hammer-IQ должно было сделать опечатку в исходном коде, запустить NB с этой ошибкой (несмотря на сообщение об ошибке), и класс кэширования был успешно удален.

Ответ 3

Я столкнулся с этой проблемой в Linux Mint Nadia с Netbeans 7.2.1, но был в тупике относительно того, где может быть место кэширования - мой фактически находился в

/home/USER/.cache/netbeans/7.2.1

а не в папке .netbeans.

Если вы не знаете, где находится кеш на вашей конкретной настройке, просто зайдите в меню помощи > о меню в Netbeans, и он скажет вам правильный путь.

Ответ 4

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

Ответ 5

На самом деле вам не нужно удалять всю папку индекса. Когда вы открываете netbeans и ваша папка проекта активна. Netbeans начинает сканирование файлов и создает временные папки проектов (в папке индекса) для всех активных проектов. Если вы проверите файл index\segment (его текстовый файл и его можно просмотреть в блокноте/(текстовый редактор)), вы сможете определить папки, которые представляют ваш проект. Затем вы можете удалить эти папки и перезагрузить netbeans.

* Активный проект означает те проекты, которые были открыты до отключения Netbeans.