当前位置: 首页 > 知识库问答 >
问题:

IntellijIDEA Gradle JavaFX:java。lang.ClassNotFoundException用于一个“运行配置”,但不用于另一个

毕富
2023-03-14

Intellij IDEA用不良行为把我逼疯了:

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

  • 一个叫"HelloFX"
  • 一个叫"ImageView示例"

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

  • 为了“HelloFX”

  • 对于“ImageViewExample”

配置是相同的,在这两种情况下(这将是很好的,不必处理一个巴洛克式复杂的文本框集,只是有一个属性值的文本描述,一个可以复制粘贴太,但我离题)

对于应用程序“HelloFX”,一切都运行得很好,但是对于应用程序“ImageView示例”,消息是在模块“JavaFXTrial.main”中找不到“类”包2。

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

但这只是调用另一个类的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 \
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只是拼凑了一个运行配置,这显然是错误的...但是它至少找到了主类。

更新

通过添加模块路径修复由Intellij IDEA创建的运行配置,使运行配置工作,尽管故障运行配置和新(现在工作)运行配置在表面上看起来完全相似。

更新^3

即使在查看时。创意/工作空间。xml项目的工作和非工作运行配置相同。。除了非工作的一个没有标记为临时的

<component name="RunManager" selected="Application.ImageViewExampleB"> 

   <configuration name="HelloFX" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> 
     <option name="MAIN_CLASS_NAME" value="pack1.HelloFX" /> 
     <module name="JavaFxTrial.main" /> 
     <option name="VM_PARAMETERS" value="--module-path /usr/local/java/javafx/javafx-sdk-16/lib/ --add-modules javafx.controls " /> 
     <method v="2"> 
       <option name="Make" enabled="true" /> 
     </method> 
   </configuration> 
   
   <configuration name="ImageViewExample" type="Application" factoryName="Application"> 
     <option name="MAIN_CLASS_NAME" value="pack2.ImageViewExample " /> 
     <module name="JavaFxTrial.main" /> 
     <option name="VM_PARAMETERS" value="--module-path /usr/local/java/javafx/javafx-sdk-16/lib/ --add-modules javafx.controls" /> 
     <method v="2"> 
       <option name="Make" enabled="true" /> 
     </method> 
   </configuration> 
   
   <configuration name="ImageViewExampleB" type="Application" factoryName="Application" temporary="true"> 
     <option name="MAIN_CLASS_NAME" value="pack2.ImageViewExample" /> 
     <module name="JavaFxTrial.main" /> 
     <option name="VM_PARAMETERS" value="--module-path /usr/local/java/javafx/javafx-sdk-16/lib/ --add-modules javafx.controls" /> 
     <extension name="coverage"> 
       <pattern> 
         <option name="PATTERN" value="pack2.*" /> 
         <option name="ENABLED" value="true" /> 
       </pattern> 
     </extension> 
     <method v="2"> 
       <option name="Make" enabled="true" /> 
     </method> 
   </configuration> 
   
   <configuration name="JavaFxTrial" type="GradleRunConfiguration" factoryName="Gradle" temporary="true"> 
     <ExternalSystemSettings> 
       <option name="executionName" /> 
       <option name="externalProjectPath" value="$PROJECT_DIR$" /> 
       <option name="externalSystemIdString" value="GRADLE" /> 
       <html" target="_blank">option name="scriptParameters" value="--info" /> 
       <option name="taskDescriptions"> 
         <list /> 
       </option> 
       <option name="taskNames"> 
         <list /> 
       </option> 
       <option name="vmOptions" value="" /> 
     </ExternalSystemSettings> 
     <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess> 
     <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess> 
     <DebugAllEnabled>false</DebugAllEnabled> 
     <method v="2" /> 
   </configuration> 
   <list> 
     <item itemvalue="Application.ImageViewExample" /> 
     <item itemvalue="Application.HelloFX" /> 
     <item itemvalue="Application.ImageViewExampleB" /> 
     <item itemvalue="Gradle.JavaFxTrial" /> 
   </list> 
   <recent_temporary> 
     <list> 
       <item itemvalue="Application.ImageViewExampleB" /> 
       <item itemvalue="Gradle.JavaFxTrial" /> 
       <item itemvalue="Application.HelloFX" /> 
     </list> 
   </recent_temporary> 
</component>

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

共有1个答案

丰俊艾
2023-03-14

好吧

事实证明,构建和运行的小部件是空白敏感的...

如果你看一看工作区,这一点就很明显了。xml文件

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

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

一个明显的迹象,如果你知道要寻找什么:

那很容易。

错误报告已提交给JetBrains。

 类似资料:
  • 问题内容: 我有一个Spring应用程序,我希望能够在配置之间进行切换,这取决于我是调试服务器还是服务器正在生产中。(配置的区别在于数据库位置。) 理想情况下,我想在启动时将命令行参数传递给我的Spring应用程序并设置应用程序配置。 我有两个单独的application.properties文件,一个带有生产值,另一个带有调试值。如何在两者之间切换? 问题答案: 您可以有3个属性文件,和。您可以

  • 我们正在用JDK11测试编译。在我们的pom中。xml,我们依赖于xml API: 代码在JDK 8中编译得很好,但在JDK 11中会出现错误,因为xml API中的大多数类也在JDK 11中,并且会发生以下错误:包javax。xml。可以从多个模块访问解析器:未命名、java。xml 有没有办法进入pom。xml必须有条件地使用依赖项,如jdk11是否为。是否设置了编译属性?

  • 问题内容: 我希望在上面。我尝试使用,但不起作用。 我已经试过这段代码: 问题答案: 您可以同时添加到div和创建 或者您可以使用,现在应该将其放置在 3D空间中, 而不要在平面中展平。 您也可以使用一些随机的像或 也可以,但是它们不好

  • 我有以下xml文件结构: 我的目标是借助xslt文件生成html输出。在这样做的过程中,我想应用一个模板来指导根元素的子元素,该元素将标记的名称输出为标题1,其内容包含在 为了更容易理解我想要的是HTML输出的示例: 现在,我的尝试如下所示:http://pastebin.com/wKgSLbcE 但它不适用于

  • 问题内容: 我经历了太多的代码,试图找出我做错了什么,但我却步履蹒跚,浪费时间。这将非常简单,但我无法弄清楚。 我正在开发一个Android应用程序,需要将2个微调器放在一个活动上。第二个微调器将根据第一个微调器上选择的条目进行填充。听起来很简单吧? 所以这就是我想做的。如果用户选择Mobile,则应显示中的内容,当用户选择Large business 时应运行,最后一个条目应调用。我得到的只是一

  • 我有两个版本的oracle,oracle Database 11g Enterprise Edition 11.2.0.1.0版本-生产版和oracle Database 11.g Enterprise Edition版本11.2-0.3.0版本-64位生产版 我有这个sql: 它适用于11.2.0.1.0,但在11.2.0.3.0上,我收到此错误: 我能做些什么来解决这个问题? 感谢。