web-dev-qa-db-fra.com

"Code source incompilable" RuntimeException dans les netbeans

J'essaie d'aider un autre développeur qui utilise Netbeans. Lorsqu'il exécute ou débogue un de ses codes dans Netbeans (6.9.1), il obtient un "code source incompilable" RuntimeException. Je suis assez expérimenté en Java mais je suis plus habitué à IntelliJ, et je n'ai pas du tout utilisé Netbeans.

Je l'ai fait un peu de recherche sur Google et il semble que Netbeans compile du code même avec des erreurs, puis jette le RuntimeException sur les erreurs. (Comportement assez mauvais IMO, mais je suppose que certains le trouveront utile.) Je l'ai fait pour reconstruire complètement le projet sans erreurs de compilation, mais le RuntimeException semble toujours se produire. Je suppose qu'il a de mauvaises données de classe en cache quelque part profondément dans Netbeans.

2 questions:

  1. Quelle est la meilleure façon de vider le cache afin de savoir où se trouve le code non compilable?
  2. Existe-t-il un moyen de désactiver ce comportement pour que le code ne s'exécute/débogue que si tout est compilé, afin que ces RuntimeException ne soient pas injectées dans le code?

J'ai googlé un peu, mais je n'ai pas encore trouvé la réponse à l'une de ces questions.


Mise à jour: Plus d'informations:

  1. La désactivation de l'option "compiler lors de l'enregistrement" fait disparaître le problème. La réactivation de CoS ramène l'exception. Malheureusement, ce n'est pas une solution, car CoS est une option très utile.
  2. http://netbeans.org/bugzilla/show_bug.cgi?id=182009 semble le rapport de bogue le plus proche, mais il a été fermé comme "RÉSOLU INCOMPLÈTE". Malheureusement, le bogue est difficile à reproduire - l'exception se produit dans Java code de bibliothèque, quand il appelle une bibliothèque tierce, donc il n'y a rien au moment où l'exception est levée, nous pouvons Et le code fonctionnera pendant des semaines, puis commencera soudainement à lancer cette erreur sans raison évidente.
  3. Nous avons essayé de supprimer manuellement l'intégralité du répertoire de construction - toujours pas un correctif.
26
Nick Fortescue

Nous avons finalement obtenu une solution, mais nous ne savons toujours pas pourquoi la situation se produit. Lorsque vous avez activé Compile On Save, Netbeans génère un deuxième ensemble de fichiers de classe pour le débogage, etc. Ceux-ci sont stockés dans $USER/.netbeans/var/cache/index/s*/Java/*/classes

D'une certaine manière (je ne sais pas comment) ce répertoire peut être corrompu ou ne pas être mis à jour.

Si vous fermez des netbeans, supprimez $USER/.netbeans/var/cache/index et tous les sous-répertoires et redémarrer les netbeans cela efface le cache. Si vous n'avez aucune erreur de compilation, votre problème devrait disparaître à ce stade.

NB: $ USER est votre répertoire utilisateur - sous Windows 7, il s'agit généralement de c:\Users\username, Je suppose que sous Unix ce sera ~username.

Si vous rencontrez ce problème, veuillez voter pour, commenter ou ajouter des informations à: http://netbeans.org/bugzilla/show_bug.cgi?id=182009

35
Nick Fortescue

J'ai rencontré le même problème filaire dans NB 7.0.1, ma solution hammer-IQ consistait à faire une faute de frappe dans le code source, exécutez NB avec cette erreur (malgré un message d'erreur) et que la classe mise en cache a bien été supprimée.

5
Szymon

J'ai rencontré ce problème sur Linux Mint Nadia avec Netbeans 7.2.1, mais j'étais perplexe quant à l'emplacement de l'emplacement du cache - le mien était en fait situé à

/home/USER/.cache/netbeans/7.2.1

plutôt que dans le dossier .netbeans.

Si vous n'êtes pas sûr de l'emplacement du cache sur votre configuration particulière, allez simplement dans le menu Aide> À propos de Netbeans et il vous indiquera le chemin correct.

3
yochannah

Après avoir réalisé que la cause était un mauvais cache des autres solutions publiées, j'ai résolu ce problème en copiant le fichier dans un autre répertoire, en le supprimant de NetBeans, puis en l'ajoutant à nouveau.

2
Tom Anderson

En fait, vous n'avez pas besoin de supprimer tout le dossier d'index. Lorsque vous ouvrez des netbeans et que votre dossier de projet est actif. Netbeans commence à analyser les fichiers et crée des dossiers de projet temporaires (dans le dossier d'index) pour tous les projets actifs. Si vous cochez le fichier index\segments (c'est un fichier texte et peut être consulté dans le bloc-notes/(éditeur de texte)), vous serez en mesure d'identifier les dossiers qui représentent votre projet. Vous pouvez ensuite supprimer ces dossiers et redémarrer les netbeans.

* Projet actif signifie les projets qui étaient ouverts avant la fermeture de Netbeans.

1
Amitabh Choudhury