[英]Runtime error for a basic javafx11 application using jdk11 and Eclipse 2019-03 (4.11.0)
[英]How to debug Maven project based on JavaFX 11 using Eclipse IDE (2019-03)
问题:我无法调试基于 JavaFX 11 的 Maven 项目,该项目是使用 Eclipse IDE 2019-03 (4.11.0) 编写和启动的,使用此处建议的方法并在相关问题中使用。
示例代码:
public class HowdyJFX extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
final String javaVersion = System.getProperty("java.version");
final String javafxVersion = System.getProperty("javafx.version");
final Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
final Scene scene = new Scene(new StackPane(l), 640, 480);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch();
}
}
如果设置了一个Eclipse
断点处的第一行start()
方法(其中一个变量被分配),应用程序应该停止在该点,其不发生运行; 相反,应用程序继续运行,就好像断点不存在一样。
在此处和上面提到的问题的底部附近建议了一个解决方案,但是这些都需要一种与OpenFX 建议的非常不同的启动方法。
在此先感谢您提供任何有用的提示!
我仍然不明白为什么人们把事情弄得这么复杂。 即使使用最新的 JDK 和 JFX,通过创建运行配置来在 Eclipse 中运行或调试程序的旧方法仍然很有效。 (我对两者都使用 15 EA)。 只需两个简单的步骤。
在上面的示例文件末尾添加以下代码行。 这将使您完全忽略所有模块系统的废话。
...
class HowdyJFXLauncher {public static void main(String[] args) {HowdyJFX.main(args);}}
在 Eclipse 包浏览器中选择该类并右键单击它。 在上下文菜单中选择“调试为”,然后在以下选项菜单中选择上面介绍的启动器而不是主程序,然后单击确定。 这将像往常一样在调试器中启动程序。 这适用于没有任何插件或其他东西的 Maven 和非 Maven 程序。 如果您有 module-info.java,请将其删除。 在这种情况下,您可能必须重建您的项目,以便正确设置类路径。
我每天都以这种方式工作,并且总是想知道为什么人们要把事情弄得这么复杂。
您可以通过将以下内容添加到 pom.xml 文件来调试 javafx 应用程序
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.4</version>
<executions>
<execution>
<!-- Default configuration for running -->
<id>default-cli</id>
<configuration>
<mainClass>be.canguru.Main</mainClass>
</configuration>
</execution>
<execution>
<!-- Configuration for debugging -->
<id>debug</id>
<configuration>
<options>
<option>-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:8001</option>
</options>
<mainClass>be.canguru.Main</mainClass>
</configuration>
</execution>
</executions>
</plugin>
在此之后运行带有目标的 Maven 运行配置
干净的javafx:运行
在这之后你应该看到
侦听地址为 8001 的传输 dt_socket
在控制台中
这应该会启动您的应用程序并在调试断点处停止
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.