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

新手上路,请多包涵

我创建了一个程序来处理数据库,但在 IntelliJ IDEA 中编译时出现以下错误。有谁知道为什么会这样,我该如何解决?

在此处输入图像描述

原文由 urpi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

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

它的发生可能有多种原因:

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

在正确配置的项目和正确的运行/调试配置下,一切正常:

跑

原文由 CrazyCoder 发布,翻译遵循 CC BY-SA 4.0 许可协议

  • 如果依赖 jar 之一进行了数字签名,则 jar 可能不会执行,因为新工件将包含依赖项的部分签名。有关详细信息,请参阅此答案。

我必须再次强调 CrazyCoder 在这里的观点。

当您尝试运行包含损坏签名的 Jar 文件时,(Oracle) JVM 曾经抛出 SecurityException 。从“出了什么问题”的角度来看,这是有道理的。

这已不再是这种情况。 他们现在确实在抛出 ClassNotFoundException s - 即使该类就在文件中(无论它是在默认包/顶层还是在嵌套包结构中)。

原文由 Holger Müller 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题