netbeans中的“无法编译的源代码”RuntimeException

问题描述 投票:26回答:5

我正在尝试帮助另一个使用Netbeans的开发人员。当他在Netbeans(6.9.1)中运行或调试他的一些代码时,他得到了一个“Uncompilable源代码”RuntimeException。我在Java方面经验丰富,但更习惯于IntelliJ,并且根本没有使用过Netbeans。

我已经完成了一些谷歌搜索,似乎Netbeans即使有错误也会编译代码,然后把错误扔到RuntimeException。 (相当糟糕的行为IMO,但我想有些人会发现它很有用。)我让他完全重建项目没有编译错误,但RuntimeException似乎仍然会发生。我假设他在Netbeans内部有一些糟糕的缓存类数据。

2个问题:

  1. 清除缓存的最佳方法是什么,以便我们可以找到无法编译代码的位置?
  2. 有没有办法关闭这种行为,所以代码将不会运行/调试除非一切都将编译,所以这些RuntimeException将不会被注入代码?

我已经google了一下,但还没有找到这些问题的答案。


更新:更多信息:

  1. 关闭“保存时编译”选项会使问题消失。再次打开CoS会带来异常。不幸的是,这不是一个修复,因为CoS是一个非常有用的选择。
  2. http://netbeans.org/bugzilla/show_bug.cgi?id=182009似乎是最接近的错误报告,但它已被关闭为“已解决不完整”。遗憾的是,这个bug很难重现 - 当它调用第三方库时,Java库代码中会发生异常,所以在我们可以更改的异常情况下没有任何内容。代码将工作数周,然后突然开始抛出此错误,没有明显的原因。
  3. 我们已经尝试手动删除整个构建目录 - 仍然不是修复。
java netbeans
5个回答
35
投票

我们终于得到了解决方案,但仍然不太清楚为什么会出现这种情况。当您启用Compile On Save时,Netbeans会生成第二组用于调试等的类文件。这些文件存储在$USER/.netbeans/var/cache/index/s*/java/*/classes

以某种方式(不确定如何)此目录可能会损坏或无法更新。

如果关闭netbeans,请删除$USER/.netbeans/var/cache/index和所有子目录并重新启动netbeans,这将清除缓存。如果您没有编译错误,那么您的问题应该在此时消失。

注意:$ USER是你的用户目录 - 在Windows 7上这通常是c:\Users\username,我想在Unix上它将是~username

如果您遇到此问题,请投票,评论或添加信息:http://netbeans.org/bugzilla/show_bug.cgi?id=182009


5
投票

我在NB 7.0.1中遇到了相同的有线问题,我的hammer-IQ解决方案是在源代码中输入错误,使用此错误运行NB(尽管出现错误消息)并且已成功删除缓存类。


3
投票

我在使用Netbeans 7.2.1的Linux Mint Nadia上遇到过这个问题,但对于缓存位置可能位于何处感到困惑 - 我的实际位于

/home/USER/.cache/netbeans/7.2.1

而不是在.netbeans文件夹中。

如果您不确定缓存在特定设置中的位置,只需转到Netbeans中的帮助>关于菜单,它会告诉您正确的路径。


2
投票

在意识到原因是来自其他发布的解决方案的错误缓存之后,我通过将文件复制到另一个目录,从NetBeans中删除它,然后再次添加它来解决了这个问题。


1
投票

实际上,您不需要删除整个索引文件夹。当您打开netbeans并且您的项目文件夹处于活动状态时。 Netbeans开始扫描文件并为所有活动项目创建临时项目文件夹(在索引文件夹中)。如果检查index \ segments文件(它是一个文本文件,可以在记事本/(文本编辑器)中查看),您将能够识别代表您的项目的文件夹。然后,您可以删除这些文件夹并重新启动netbeans。

*活动项目是指在Netbeans关闭之前打开的项目。

© www.soinside.com 2019 - 2024. All rights reserved.