当我尝试从终端运行JavaFx应用程序时,它无法运行显示Error: Could not find or load main class com.test.javafx.HelloWorld
这是我的代码:
package com.test.javafx;
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 HelloWorld 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);
}
}
编译未显示任何错误且成功。但尝试运行应用程序会导致Error: Could not find or load main class com.test.javafx.HelloWorld
。但是,当我运行一个简单的应用程序时,它运行没有任何错误。
这是javap输出:
Compiled from "HelloWorld.java"
public class com.test.javafx.HelloWorld extends javafx.application.Application {
public com.test.javafx.HelloWorld();
public void start(javafx.stage.Stage);
public static void main(java.lang.String[]);
}
我也尝试了以下内容:
java -cp /home/itachi/mycategories/installs/devel/java/jdk/jdk1.8.0_101/jre/lib/ext/jfxrt.jar;." com.test.javafx.HelloWorld
但这也行不通。
答案 0 :(得分:4)
修正了问题
使用Linux软件包管理器安装某些软件时,安装了OpenJDK JRE Headless(作为依赖软件包)。通过运行确认了这一点:
$ java -version
openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
$ java com.test.javafx.HelloWorld
Error: Could not find or load main class com.test.javafx.HelloWorld
如果我使用此OpenJDK JVM运行,则会显示错误。
更改了PATH
变量,以便现在Oracle的JVM是默认的。
$ ${JAVA_HOME}/bin/java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
$ ${JAVA_HOME}/bin/java com.test.javafx.HelloWorld => [Now the program runs]
[After Changing the ~/.bashrc file]
$ . ~/.bashrc
java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
$ java com.test.javafx.HelloWorld => [Now the program runs]
但是,我不确定为什么OpenJDK JVM会抛出Error: Could not find or load main class com.test.javafx.HelloWorld
,因为从同一位置运行Oracle JVM会渲染应用程序。
答案 1 :(得分:0)
当java无法在classpath中找到编译的类时,通常会发生这种情况。试试java -cp <path to .class files> HelloWorld
答案 2 :(得分:0)
我只是在尝试使用股票JavaFX HelloWorld示例时遇到了这个问题,看起来这是OpenJDK / JavaFX的一个已知的低优先级错误。注释掉HelloWorld.java顶部的“包”声明,然后重新编译使其可以正常运行。
https://bugs.openjdk.java.net/browse/JDK-8163089
我在XUbuntu 16.04 / Java 1.8.0_144上实现了这一目标。