Rad*_*ekJ 7 javafx intellij-idea gradle kotlin
我刚刚安装: IntelliJ IDEA 2021.2.3(社区版)和 jdk-16.0.2
在 IntelliJ 中我创建一个新项目:
文件->新建->项目
然后选择:
语言:科特林,
构建系统:Gradle,
项目SDK,16版本16.0.2
其他一切我都保持原样。
它创建了项目。
我去HelloApplication.kt并点击功能旁边的“播放main()” 。
我收到此错误:
Error occurred during initialization of boot layer java.lang.module.FindException: Error reading module: C:\Users\User\IdeaProjects\demo\build\classes\java\main Caused by: java.lang.module.InvalidModuleDescriptorException: Package com.example.demo not found in module
谁能指导我如何让它工作?为什么这个项目不能开箱即用?
正如安德烈在评论中指出的,这似乎是一个已知的错误:
所附的 youtrack 案例中解释了问题的根本原因。
看来这是使用 Java 平台模块系统时 Idea 中 Kotlin+Gradle 的普遍问题,而不仅仅是 Gradle+JavaFX+Kotlin“新建 JavaFX 项目”向导创建的代码的特定问题(这就是我所假设的)。
建议
在 Idea 2023.3.3 中为新项目向导 JavaFX+Gradle+Kotlin 组合生成的项目在 IDE 中运行时单击绿色箭头会中断。如果您使用 Gradle 运行这些项目,它们仍然会运行(在 IDE 中,转到 Gradle 窗格并双击“任务”|“应用程序”|“运行”)。对于许多人来说,这可能是一个足够的解决方法。
希望这些只是短期问题,Intellij 将在适当的时候解决。
我在 Idea 中使用 Kotlin+Maven 而不是 Kotlin+Gradle 尝试了一个新项目,它可以正常工作,而无需在每次执行后手动删除构建目录。我建议,如果您只是进行试验,那么就使用 Kotlin+Maven+JavaFX 组合,至少在 Kotkin+Gradle+JavaFX 向导工作得更好之前是这样。
如果构建系统对您来说很重要并且应该是 Gradle,那么您现在需要自己做一些更多的工作。尝试此问题的其他答案中建议的一些解决方法,或者查看openjfx.io上有关 JavaFX 入门的其他一些信息。
或者,如果您必须使用 Gradle 和 JavaFX 以及 Kotlin 和 Idea 的内置构建和执行功能而不是 Gradle,并且无法使其在 IDE 中工作 -> 然后将您的 Kotlin JavaFX 项目转换为非模块化项目,按照此答案中的module-info.java建议,通过设置指向 SDK 的 VM 选项(如 openjfx.io JavaFX 入门文档中所定义)删除 JavaFX 并将其放置在模块路径上。
我在我的环境(OS X)中尝试了它,按照您在问题中提供的相同步骤和版本,得到了与您相同的结果。
IntelliJ IDEA 2021.2.3(社区版)目前在使用 Idea New JavaFX 项目向导生成和使用 JavaFX+Gradle+Kotlin 项目的方式上存在一些 bug 和错误。
处理这些问题的适当方法是在 Idea 问题跟踪器中为 IntelliJ 创建错误请求。
一个新项目(按问题中所述创建)将在您第一次尝试运行它时运行,然后它将因错误而失败(也如问题中所述):
Error occurred during initialization of boot layer java.lang.module.FindException: Error reading module: C:\Users\User\IdeaProjects\demo\build\classes\java\main Caused by: java.lang.module.InvalidModuleDescriptorException: Package com.example.demo not found in module
build目录。当项目运行时,它没有正确设置模块路径并从类路径运行 JavaFX,这将生成以下警告:
(WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @4a072657').
我遇到的另一个问题是,如果您只使用默认值,如果已经有一个名为 的项目demo,它会尝试创建一个demo1以包含该字符串的包和模块名称命名的项目,从而导致检查警告:
Module name component 'demo1' should avoid terminal digits
| 归档时间: |
|
| 查看次数: |
1609 次 |
| 最近记录: |