2016-10-07 137 views
0

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 

但是,这并不正常工作。

回答

1

修正问题

问题

虽然安装在安装使用Linux软件包管理器,OpenJDK的JRE无头的一些软件(作为扶养包)。这是通过运行确认的:

$ 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呈现应用程序。

+0

这不会给你在问题中发布的错误消息。 –

+0

@James_D我已经更新了答案。希望回答你的问题。 – Kenpachi

+0

您是否打算将第一个代码块中的'java -version'的输出与第二个代码块中的输出相同? –

0

当java无法在classpath中找到您编译的类时,通常会发生这种情况。尽量java -cp <path to .class files> HelloWorld

+0

我试过了。没有工作 – Kenpachi