在IntelliJ IDEA中运行时java.lang.ClassNotFoundException

在IntelliJ IDEA中运行时java.lang.ClassNotFoundException,java,intellij-idea,Java,Intellij Idea,我创建了一个与数据库一起工作的程序,在IntelliJ IDEA中编译时出现以下错误。有人知道为什么会发生这种情况,以及我如何解决它吗 您遇到的错误不是在编译时发生的,而是在您尝试运行应用程序时发生的。这是因为Java无法在项目输出目录(classpath)的db子目录中找到Table.class文件 发生这种情况的原因有多种: 错误的主类 Table.java(由于意外或故意,因为它包含错误,并且您希望在处理其他代码时跳过它) 类未编译,因为运行/调试配置中启动步骤之前的生成步骤 项目配置错

我创建了一个与数据库一起工作的程序,在IntelliJ IDEA中编译时出现以下错误。有人知道为什么会发生这种情况,以及我如何解决它吗


您遇到的错误不是在编译时发生的,而是在您尝试运行应用程序时发生的。这是因为Java无法在项目输出目录(classpath)的
db
子目录中找到
Table.class
文件

发生这种情况的原因有多种:

  • 错误的主类
  • Table.java
    (由于意外或故意,因为它包含错误,并且您希望在处理其他代码时跳过它)
  • 类未编译,因为运行/调试配置中启动步骤之前的生成步骤
  • 项目配置错误,没有包含
    db
    子目录的源根
  • Table.java
    包含不正确的
    package
    语句,或者已定位/移动到其他包
  • 项目路径包含Mac/Linux上的冒号
    ,或分号
    
    
  • 如果其中一个依赖jar是数字签名的,jar可能不会执行,因为新工件将包括依赖项的部分签名。有关更多详细信息,请参阅
  • 在项目结构中,确保您有正确的Java版本进行编译
  • 有一种情况是,有时从命令行模板创建的Java项目无法工作,因为
    .idea/modules.xml
    文件引用了名为
    untitled104.iml
    的无效模块文件。手动修复模块名称或从头开始创建项目,并且不使用模板
  • 在Windows上,启用了“Beta:使用Unicode UTF-8获得全球语言支持”区域设置。有关更多详细信息和解决方法,请参阅
  • 当IntelliJ IDEA被配置为以Eclipse格式存储模块依赖项时,源根配置将由于错误而丢失。将模块配置为使用IntelliJ IDEA格式依赖项作为解决方法
在正确配置的项目中,使用正确的运行/调试配置,一切正常:

  • 如果其中一个依赖jar是数字签名的,jar可能不会执行,因为新工件将包括依赖项的部分签名。有关更多详细信息,请参阅此答案
我必须再次强调疯狂代码的要点

(Oracle)JVM用于在您尝试运行包含损坏签名的Jar文件时引发SecurityException。从“怎么了”的角度来看,这是有道理的


情况不再如此。他们现在确实在抛出ClassNotFoundExceptions,即使该类就在文件中(无论它是在默认包/顶层还是在嵌套包结构中)。

以下是对我有效的方法:

我删除了
.ide
文件夹,
.iml
文件。然后intelliJ自动生成的所有其他文件重新启动了我的ide,有人问我是否想让我的项目用maven运行,就是这样


显然,我说是的:)

如果你已经尝试了其他人建议的一切(删除.idea文件夹、重建等),那么还有其他地方可以检查,特别是如果你已经构建了一个工件罐。当您第一次构建工件jar时,IntelliJ将一个文件夹:META-INF添加到src目录。其中只有一个文件:MANIFEST.MF,它的信息指向Java要查找的主类。如果您已经重构了项目包,不幸的是IntelliJ不会用新的更改更新此文件。My MANIFEST.MF包含以下正确内容:

Manifest-Version: 1.0
Main-Class: org.umoja4life.fatashibackend.MainKt
其中,“org.umoja4life.fatashibackend”是包名,“MainKt”是IntelliJ为(伪)“Main类”构造的名称,因为fun Main()已在包目录的文件“Main.kt”中定义

新手:顺便说一句,这会让你感到困惑,因为不应该有实际的“class Main{}”定义,尽管错误消息指出应该有

在我发现这个文件之前,在尝试了其他人的建议之后,我发现让IntelliJ启动一个项目(使用正确的包名!),用一个简单的main.kt初始化它是最快的,它具有:


运行并测试;然后,我在所有其他文件中重新添加、重建、运行和测试它。显然IntelliJ有一些秘密状态信息存储在某个地方,如果您重构已经运行的项目和jar的包名,这些信息就不会得到正确更新。

这是IntelliJ思想中的一个已知错误。 为了解决这个问题,我只是删除了.iml和.idea,然后重新启动IDE。 它适用于大多数情况


编辑:文件将在项目目录中。

谢谢!现在它正在运行,但它给了我一个新的错误。此错误表示错误java:invalid source release:1.9。你知道为什么会这样吗?谢谢你的帮助!现在可以了!我能知道为什么投反对票吗?我没有投反对票(我实际上投了更高的票),但这里的很多人认为这是离题的,而FAQ清楚地表明,关于“程序员常用的软件工具”的问题是完全正确的。在问题中发布截图而不是实际错误的文本是另一个导致否决票的常见原因。感谢您的评论!我加载了错误的java版本。转到文件->项目结构->项目sdk->选择正确的版本。我安装了9.0和1.8,默认情况下需要9.0。这里的版本必须与运行配置中的版本相同。在哪里可以找到这样的目录?这些目录在哪里?在项目文件夹@laszlo中。很抱歉,没有告诉您该文件将在哪里
fun main() { println("hello world!") }