Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle IntellijIDEA+;格拉德尔+;JavaFX:java.lang.ClassNotFoundException for one“;“运行配置”;但不是另一个_Gradle_Intellij Idea_Javafx_Module Path - Fatal编程技术网

Gradle IntellijIDEA+;格拉德尔+;JavaFX:java.lang.ClassNotFoundException for one“;“运行配置”;但不是另一个

Gradle IntellijIDEA+;格拉德尔+;JavaFX:java.lang.ClassNotFoundException for one“;“运行配置”;但不是另一个,gradle,intellij-idea,javafx,module-path,Gradle,Intellij Idea,Javafx,Module Path,Intellij IDEA让我因不良行为而发疯: 我有一个(基于Gradle的)项目,其中有两个主要类是用Java编写的,每个类都在自己的包中 一个叫做“HelloFX” 其中一个称为“ImageViewExample” 两者都使用JavaFX,因此需要一些特殊的“运行配置” 为了“HelloFX” 对于“ImageViewExample” 这两种情况下的配置都是相同的(最好不必处理一组复杂的巴洛克文本框,只需在属性值文本描述中包含所有内容,也可以复制粘贴,但我离题了) 对于应

Intellij IDEA让我因不良行为而发疯:

我有一个(基于Gradle的)项目,其中有两个主要类是用Java编写的,每个类都在自己的包中

  • 一个叫做“HelloFX”
  • 其中一个称为“ImageViewExample”

两者都使用JavaFX,因此需要一些特殊的“运行配置”

  • 为了“HelloFX”

  • 对于“ImageViewExample”

这两种情况下的配置都是相同的(最好不必处理一组复杂的巴洛克文本框,只需在属性值文本描述中包含所有内容,也可以复制粘贴,但我离题了)

对于应用程序“HelloFX”,一切都非常好,但对于应用程序“ImageViewExample”,消息是“在模块“JavaFXTrial.main”中找不到类“pack2.ImageViewExample”

在一种情况下,Intellij IDEA(或者更确切地说,Gradle运行时?)无法发现主类,但在另一种情况下却无法发现

经过编译后,编译工作确实做得很好:

JavaFxTrial/
├── build
│   ├── classes
│   │   └── java
│   │       └── main
│   │           ├── pack1
│   │           │   └── HelloFX.class
│   │           └── pack2
│   │               └── ImageViewExample.class
│   │
│   │
我也可以从命令行启动这个类

因此,这在命令行和Intellij IDEA中起作用:

JAVA=/usr/local/java
IDEA_PROJECTS=$HOME/Development/idea_projects

$JAVA/jdk15_64_adopt/bin/java \
--module-path $JAVA/javafx/javafx-sdk-16/lib/ \
--add-modules javafx.controls \
-cp $IDEA_PROJECTS/JavaFxTrial/build/classes/java/main \
pack1.HelloFX
JAVA=/usr/local/java
IDEA_PROJECTS=$HOME/Development/idea_projects

$JAVA/jdk15_64_adopt/bin/java \
--module-path $JAVA/javafx/javafx-sdk-16/lib/ \
--add-modules javafx.controls \
-cp $IDEA_PROJECTS/JavaFxTrial/build/classes/java/main \
pack2.ImageViewExample
但这只是调用另一个类的main,在Intellij IDEA中不起作用:

JAVA=/usr/local/java
IDEA_PROJECTS=$HOME/Development/idea_projects

$JAVA/jdk15_64_adopt/bin/java \
--module-path $JAVA/javafx/javafx-sdk-16/lib/ \
--add-modules javafx.controls \
-cp $IDEA_PROJECTS/JavaFxTrial/build/classes/java/main \
pack1.HelloFX
JAVA=/usr/local/java
IDEA_PROJECTS=$HOME/Development/idea_projects

$JAVA/jdk15_64_adopt/bin/java \
--module-path $JAVA/javafx/javafx-sdk-16/lib/ \
--add-modules javafx.controls \
-cp $IDEA_PROJECTS/JavaFxTrial/build/classes/java/main \
pack2.ImageViewExample
肯定错过了什么,但是什么

更新: 右键单击“Run ImageViewExample.main()”(我认为这意味着“通过Gradle插件运行”)(“Run HelloFX.main()”会成功),您会收到以下消息:

JavaFX runtime components are missing, and are required to run this application
这与“未找到类”并不完全相同

运行“with info”会发现Gradle插件运行启动“ImageViewExample”的命令行将Gradle缓存的所有JavaFX jar放在类路径而不是模块路径上,这显然会失败

Error: JavaFX runtime components are missing, and are required to run this application
这可能与此有关

更新:但可能不会。

右键单击Run只是拼凑出一个Run配置,这显然是错误的…但它至少找到了主类

更新更新

通过添加模块路径修复Intellij IDEA创建的运行配置,使“运行配置”能够正常工作,尽管故障“运行配置”和新的(正在工作的)“运行配置”表面上看起来完全相同

更新^3

即使在查看项目的
.idea/workspace.xml
时,工作和非工作运行配置都是相同的..除了非工作运行配置没有标记为


真的
真的
假的
此设置中的移动部件太多。不喜欢。

好的

事实证明,用于构建和运行的小部件是对空格敏感的

如果查看workspace.xml文件,这一点会变得很明显

<option name="MAIN_CLASS_NAME" value="pack2.ImageViewExample " /> 

这就是为什么XML不应该作为配置语言轻易地被忽略的原因

如果你知道要寻找什么,这是一个明显的标志:

嗯,那很容易

提交给JetBrains的错误报告