无法从终端运行JavaFX应用程序

时间:2016-10-07 03:09:58

标签: java javafx

当我尝试从终端运行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

但这也行不通。

3 个答案:

答案 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上实现了这一目标。