问题描述
我下载了:
-OpenJDK 11.0.2
-JavaFX SDK 11.0.2
这两个文件都提取到路径C:/Program Files/Java/
I downloaded:
- OpenJDK 11.0.2
- JavaFX SDK 11.0.2
Both files are extracted to path C:/Program Files/Java/
操作系统:Windows 10
IDE:NetBeans 10.0
OS: Windows 10
IDE: NetBeans 10.0
路径:
JAVA_HOME = C:/Program Files/Java/jdk-11.0.2
PATH_TO_FX = C:/Program Files/Java/javafx-sdk-11.0.2/lib
内部路径系统变量添加%JAVA_HOME%/bin
Inside Path system variable add %JAVA_HOME%/bin
在NetBeans中,我创建了一个名为JFXDev的Java应用程序项目,其中包含一个包com. com软件包内部是一个主要的类,具有以下代码:
In NetBeans I created Java Application project named JFXDev which contains one package com. Inside com package is one main class with following code:
package com;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
项目属性已修改:
1)库-> Modulepath添加了路径C:/Program Files/Java/javafx-sdk-11.0.2/lib
2)库->类路径添加了路径C:/Program Files/Java/javafx-sdk-11.0.2/lib/javafx.controls.jar
3)运行-> VM选项:添加了--add-modules = javafx.controls,javafx.fxml
Properties of projects are modified:
1) Libraries -> Modulepath added path C:/Program Files/Java/javafx-sdk-11.0.2/lib
2) Libraries -> Classpath added path C:/Program Files/Java/javafx-sdk-11.0.2/lib/javafx.controls.jar
3) Run -> VM Options: added --add-modules=javafx.controls,javafx.fxml
当我使用NetBeans启动应用程序时,它可以正常运行,但是无法从dist文件夹启动应用程序.我在cmd中尝试了以下命令:
When I start application with NetBeans it works perfectly but I was unable to start application from dist folder. I tried following commands in cmd:
-
命令:
java -jar JFXDev.jar
- 响应:
Error: could not find or load main class com.Main
命令:java --module-path '%PATH_TO_FX% --add-modules=javafx.comntrols JFXDev
- 响应:
Error: Could not find or load main class Files/Java/javafx-sdk-11.0.2/lib
命令:java --module-path %PATH_TO_FX% --add-modules=javafx.comntrols Main
- 响应:
Error: Could not find or load main class Files/Java/javafx-sdk-11.0.2/lib
命令:java --module-path %PATH_TO_FX% --add-modules=javafx.comntrols com.Main
- 响应:
Error: Could not find or load main class Files/Java/javafx-sdk-11.0.2/lib
- 响应:
Error: Could not find or load main class Main
后来我添加了module-info.java
文件:
module JFXDev {
requires javafx.controls;
exports com;
}
但这没什么区别.
我在做什么错,有什么建议或建议吗?
But it doesn't make any difference.
What I'm doing wrong, any advice or suggestion?
我尝试从>://openjfx.io/openjfx-docs/#install -javafx 但出现相同的错误:/
I tried steps from https://openjfx.io/openjfx-docs/#install-javafx but I get same error :/
推荐答案
实际"答案
您提供的某些错误表明参数中的空格存在问题(例如C:/Program Files/...
).用引号"%PATH_TO_FX%"
括住%PATH_TO_FX%
.然后,就像您在评论中所说的那样,正确的命令行是:
"Actual" Answer
Some of those errors you've provided indicate a problem with spaces in your arguments (e.g. C:/Program Files/...
). Surround %PATH_TO_FX%
with quotes: "%PATH_TO_FX%"
. Then, as you said in a comment, the correct command line for you is:
java -p "%PATH_TO_FX%" --add-modules javafx.controls -jar <path-to-jar-file>
其他答案
根据您提供的信息,很难(至少对我来说)很难说出问题到底出在哪里.取而代之的是,我将提供一些示例,这些示例从命令行启动模块化和非模块化的JavaFX应用程序.
Rest of Answer
From the information you've provided, it's difficult (for me at least) to tell what exactly the problem is. Instead, I'll give some examples of launching a JavaFX application from the command line, both modular and non-modular.
比方说,您有一个项目,只有一个类,即主类,名为com.example.Main
.此类扩展了Application
并显示了一个简单的窗口.我们还可以说,当代码是模块化的时,该模块如下所示:
Let's say you have a project with one class—the main class—named com.example.Main
. This class extends Application
and displays a simple window. Let's also say that, when the code is modular, the module looks like:
module app {
requires javafx.controls;
exports com.example to javafx.graphics;
}
您的项目结构如下:
\---<project-directory>
+---out
| +---artifacts
| | app-1.0.jar (modular or non-modular)
| |
| \---classes
| | module-info.class (when modular)
| |
| \---com
| \---example
| Main.class
|
\---src
| module-info.java (when modular)
|
\---com
\---example
Main.java
然后您的命令行将类似于以下之一(面向Windows):
Then your command line will look like one of the following (Windows oriented):
java -p "%PATH_TO_FX%" --add-modules javafx.controls -cp out\classes com.example.Main
Jar File
java -p "%PATH_TO_FX%" --add-modules javafx.controls -jar out\artifacts\app-1.0.jar
注意:清单中需要Main-Class
属性.
java -p "%PATH_TO_FX%;out\classes" -m app/com.example.Main
Jar File
java -p "%PATH_TO_FX%;out\artifacts" -m app/com.example.Main
或者如果Jar是使用--main-class
java -p "%PATH_TO_FX%;out\artifacts" -m app
注释:
- 上面假设
<project-directory>
是工作目录. -
-p
是--module-path
的简写 -
-m
是--module
的简写 -
-cp
是--class-path
或-classpath
的简写
- The above assumes that
<project-directory>
is the working directory. -p
is shorthand for--module-path
-m
is shorthand for--module
-cp
is shorthand for--class-path
or-classpath
这篇关于如何在IDE外部启动JavaFX 11应用程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!