【问题标题】:"Uncompilable source code" RuntimeException in netbeansnetbeans 中的“无法编译的源代码”RuntimeException
【发布时间】:2010-12-08 09:46:53
【问题描述】:

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

我已经做了一些谷歌搜索,似乎 Netbeans 即使出现错误也会编译代码,然后在错误处抛出 RuntimeException。 (IMO 的行为相当糟糕,但我想有些人会觉得它很有用。)我让他完全重建项目而没有编译错误,但 RuntimeException 似乎仍然存在。我认为他在 Netbeans 深处的某个地方有一些糟糕的缓存类数据。

2 个问题:

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

我已经用谷歌搜索了很多,但还没有找到这些问题的答案。


更新:更多信息:

  1. 关闭“保存时编译”选项可使问题消失。再次打开 CoS 会使异常恢复。不幸的是,这不是解决办法,因为 CoS 是一个非常有用的选项。
  2. http://netbeans.org/bugzilla/show_bug.cgi?id=182009 似乎是最接近的错误报告,但它已被关闭为“已解决的未完成”。不幸的是,该错误很难重现——异常发生在 Java 库代码中,当它调用第三方库时,因此在抛出异常时我们无法更改任何内容。并且代码将运行数周,然后突然开始抛出这个错误,没有明显的原因。
  3. 我们已尝试手动删除整个构建目录 - 仍未解决。

【问题讨论】:

标签: java netbeans


【解决方案1】:

我们终于找到了解决方案,但仍然不太清楚为什么会出现这种情况。当您激活保存时编译时,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

【讨论】:

  • +1 我也遇到了这个问题,但是,您的回答提供了解决方案。非常感谢。
  • 这次又遇到bug了,删除文件夹还是不行。
  • 我发现开发人员真的很有帮助。如果您再次遇到该错误,我相信他们会非常感谢您提供任何信息,包括您的缓存文件夹,因此请尝试保留一份副本。如果您确保使用最新的 netbeans 运行,我认为他们已经添加了一些额外的诊断代码
  • 你们是如何联系开发者的?
  • 嗨,我使用的是 Windows 7 64 位,我解决了删除 $USER/AppData/Local/NetBeans/Cache/ :)
【解决方案2】:

我在 NB 7.0.1 中遇到了同样的接线问题,我的hammer-IQ 解决方案是在源代码中打错字,运行 NB 时出现此错误(尽管有错误消息),然后缓存的类被成功删除。

【讨论】:

    【解决方案3】:

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

    /home/USER/.cache/netbeans/7.2.1
    

    而不是在 .netbeans 文件夹中。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          在带有 Netbeans 12 的 Windows 7 上遇到了同样的问题。

          缓存在这里:

          C:\Users\<Username>\AppData\Local\NetBeans\Cache
          

          ,但有时删除缓存并没有帮助。更好的解决方案是重新编译有问题的类,即进行小改动(例如添加空间)并保存。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-08
            • 2014-06-04
            • 1970-01-01
            • 1970-01-01
            • 2011-08-13
            相关资源
            最近更新 更多