【问题标题】:java.lang.RuntimeException: Uncompilable source code - what can cause this?java.lang.RuntimeException:无法编译的源代码 - 什么会导致这种情况?
【发布时间】:2011-01-20 22:56:01
【问题描述】:

这个错误很奇怪,我的代码编译得很好,我可以看到它没有问题,但是这个错误只是弹出来。我已经尝试重新启动 NetBeans 并且没有额外的异常信息。

这是什么原因造成的?

【问题讨论】:

  • 阅读堆栈跟踪,它会告诉你问题发生在哪里
  • 这不是问题。我大约每月收到一次,必须打开项目中的每个文件,添加空格或空行,然后保存。这与您在 $USER/.netbeans/var/cache/index/s*/java/*/classes 中的缓存用户文件有关
  • 注意:此处答案中的某些信息具有误导性、过时或不完整。我冒昧地从stackoverflow.com/a/10027643/719662 做出了一个规范的答案——这是 IMO 最接近历史意义上准确的答案。
  • 清理 netbeans 缓存并尝试

标签: java netbeans


【解决方案1】:

如果是 Netbeans,请尝试取消选中项目属性中的“保存时编译”设置(构建 -> 编译)。这是在类似情况下帮助我的唯一方法。

【讨论】:

  • 它有效,但我想知道为什么如果我在选中“保存时编译”时执行清理并构建它不会重新生成受影响的类...
  • 我将 none 添加到 settings.xml 以默认禁用所有项目的“保存时编译”。
  • @vaxquis,我在 kommradHomer 的回答中也没有看到合适的解决方案。只是额外的解决方法(例如,添加一个虚拟行,保存,删除它,再次保存)到这个。恕我直言,这是 Netbens 中的一个错误。恕我直言,取消选中“保存时编译”然后再次检查的解决方案是最简单的解决方案。感谢上帝,这个问题不会经常发生。
  • @vaxquis,我提供了解释一切的链接。您写道,我的答案是一种解决方法,但另一个是解决方案。我的说法是这两个答案都描述了解决方法。一年后添加的答案描述了更多的解决方法,这很好,并且在 SO 上很常见。顺便说一句:如果您需要自动化解决方法,那么您做错了。您需要修复项目设置或更改 IDE。
  • @Dime for one,正如 meta 上广泛介绍的那样,answers given in links are considered poor practice 而不是 SO 的答案,主要是由于 a) 链接腐烂,b) 可读性差。一旦您的链接失效,您的“答案”就会失去大部分价值。经验法则是大致描述确切链接提供的内容提供没有链接的功能答案所需的尽可能多的详细信息。我不喜欢和你争论,但 SO 政策通常是非常明智的。
【解决方案2】:

我猜您使用的 IDE(如 Netbeans)允许您运行代码,即使某些类不可编译。在应用程序运行时,如果你访问这个类会导致这个异常。

【讨论】:

  • 过去一个小时我一直在努力解决这个错误...谢谢 Chandru 先生。关于您的解释,这是否意味着如果我在运行时编辑有问题的类,则会发生此错误。
  • 其实这个答案加上Dime的答案才是正确答案。我在 Netbeans 中遇到了这个问题,幸运的是我在这里找到了答案。问题背后的真正原因解释了我的回答,Dime 已经回答了如何解决它。我会赞成你的两个答案。
  • 坦率地说,这几乎不是一个答案。它在描述“为什么”方面既不太准确,也完全忽略了“如何解决”部分。
【解决方案3】:

这是由于 NetBeans 在其缓存中保留了一些旧的源代码和/或编译的代码而没有注意到,例如一些代码的依赖项(即引用的包)已更改,并且文件的正确刷新/重新编译将是有序的。

解决方案是通过以下任一方式强制刷新:

a) 定位和编辑有问题的源文件以强制重新编译(例如,添加虚拟行、保存、删除、再次保存),
b) 进行干净的构建(有时会工作,有时不会),
c) 禁用“保存时编译”(不推荐,因为它可以使 IDE 成为皇家 PITA),或者
d) 手动删除 NetBeans 缓存,强制重新编译。

关于如何移除缓存:

如果您使用的是旧版本的 NetBeans:

  • 删除 .netbeans/6.9/var/cache/index/ 中与您的项目相关的所有内容(将 6.9 替换为您的版本)。

如果您使用的是较新的:

  • 删除 AppData/Local/NetBeans/Cache/8.1/index/ 中与您的项目相关的所有内容(将 8.1 替换为您的版本)。

路径可能会有所不同,例如在不同的平台上,但思路还是一样的。

【讨论】:

  • 谢谢,这正是我的问题的解决方案(也适用于 jmonkey 引擎).. 在 Windows 中,转到 %appdata% 并找到 .netbeans 或 .jmonkeyplatform :)
  • 此文件夹在 8.0.2 中似乎不再存在。
  • @Eusebius 我已经编辑了答案以包含新路径。
  • 在 windows 7 中使用 netbeans 8.1 C:\Users\Servicios\AppData\Roaming\NetBeans\8.1 ,但没有找到
  • @keke 在我的例子中,在 C:\Users\YourUsername\AppData 中,Roaming 和 Local 文件夹中都有一个 NetBeans 文件夹。在我的例子中,Roaming\NetBeans 文件夹中没有缓存文件夹,只有 Local\NetBeans 文件夹中。
【解决方案4】:

我也遇到了同样的错误,我做了干净的构建,它工作了。

【讨论】:

    【解决方案5】:

    添加 selenium-server-standalone-3.4.0.jar。它对我有用。 Download Link

    【讨论】:

      【解决方案6】:

      重新检查所有类中的包声明!

      当包的一个类中的包声明引用不存在或错误的包时,已在 NetBeans 中观察到此行为。 NetBeans 通常会检测并突出显示此错误,但如果不是这种情况,它会失败并误导性地报告包没有错误。

      【讨论】:

        【解决方案7】:

        我的一个 netbeans 项目遇到了同样的问题。

        检查您是否在所有类上正确放置了包名。我得到了同样的错误信息,因为我忘了放某个类的包名(它是从另一个项目复制的)。

        【讨论】:

          【解决方案8】:

          在项目的属性/运行屏幕中禁用保存时部署。这就是最终对我有用的东西。为什么 NetBeans 搞砸了这一切我无法理解。

          注意:我能够编译它抱怨在 NetBeans 中使用右键单击的文件。显然,当我使用 Build & Compile 时它并没有真正编译它,因为它根本没有给出任何错误。但在那之后,错误只是转移到另一个java类文件。那时我无法编译,因为它是灰色的。我还尝试删除我的 NetBeans 项目文件中的 build 和 dist 目录,但这也没有帮助。

          【讨论】:

            【解决方案9】:

            将您的代码组织为一个 Maven 模块。 完成后从终端运行命令
            $mvn installl
            检查您的代码是否构建良好。
            最后将netbeans或eclipse中的项目导入为maven项目。

            【讨论】:

              【解决方案10】:

              更改类的包,你的文件可能在错误的包中,当我从朋友那里复制代码时发生在我身上,它是默认包,我的是另一个包,因此 netbeans 无法编译。

              【讨论】:

                【解决方案11】:

                我在使用 NetBeans 8.0.1 时遇到了这个问题。关于项目删除类中的问题的消息。删除 ~/.netbeans 不起作用。我还在我的所有项目中寻找对已删除类的任何引用,但没有找到。我删除了构建类,一切。然后,当我再次启动 Netbeans 时,编译并神奇地出现在 Run 中的消息并进入母编译类。我尝试了取消选中“保存时编译”Dime 解决方案,并且有效,但它不实用。 最后,我的解决方案是编辑并强制重新编译母类。这样,新的 .class 不包含消息并且 Run 可以正常工作。

                【讨论】:

                  【解决方案12】:

                  只需检查包装,我能提供的最简单的答案是您的包装贴错标签(在一个类中)。

                  另外,你可能有一些奇怪的字符。尝试在记事本(或 Gedit)中将代码刷白,然后使用 IDE 将其粘贴到新创建的类中。

                  【讨论】:

                    【解决方案13】:

                    如果您使用的是 Netbeans,请尝试点击 Clean and Build 按钮,让它执行此操作,然后重试。为我工作!

                    【讨论】:

                      【解决方案14】:

                      我遇到了同样的问题。我的错误是包装。所以我建议你先检查包名,以及类是否在正确的包中。

                      【讨论】:

                        【解决方案15】:

                        实现我自己的函数式接口为我解决了这个问题(所以不要使用 java.util.function.*,只需使用所需的参数和返回类型创建您自己的单方法接口)。

                        【讨论】:

                          猜你喜欢
                          • 2015-07-07
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-07-25
                          • 1970-01-01
                          • 2020-02-13
                          相关资源
                          最近更新 更多