为什么javafxpackager - 不能加载主类?

时间:2014-12-14 14:49:34

标签: javafx main packager

我有一个愚蠢的问题,因为我在这里搜索了数据库,但我找不到答案。我是javaFX的新手,所以......请帮帮我!

这是我使用的代码。这是一个示例代码。

package helloworld;

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 {
    public static void main(String[] args) {
        launch(args);
    }


    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        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);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();

    }

}

使用javac HelloWorld.java从目录。\ helloworld中编译后,运行以下命令:

PS D:\documents\javafx\helloworld> javafxpackager -createjar -appclass HelloWorld -srcdir . -outdir out -outfile hello.jar -v

但是,当我cdout并运行java -jar hello.jar时,我得到了这个:

PS D:\documents\javafx\helloworld\out> java -jar hello.jar Error: Could not find or load main class HelloWorld

发生了什么事或我做错了什么?

非常感谢任何建议/解释。

谢谢大家。

Zestos。

1 个答案:

答案 0 :(得分:1)

您的应用程序类在helloworld包中,因此要引用它,您应该使用helloworld.HelloWorld的完全限定名称。

以下是使用您问题中的示例HelloWorld应用程序的完整示例。我在安装了Oracle Java 8u25的OS X 10.8上尝试了这个,它对我有用。

$ java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

$ javac -version
javac 1.8.0_25

$ tree 
.
├── classes
└── src
    └── helloworld
        └── HelloWorld.java

3 directories, 1 file

$ javac -d classes src/helloworld/HelloWorld.java

$ tree
.
├── classes
│   └── helloworld
│       ├── HelloWorld$1.class
│       └── HelloWorld.class
└── src
    └── helloworld
        └── HelloWorld.java

4 directories, 3 files

$/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javapackager -createjar -appclass helloworld.HelloWorld -srcdir classes -outdir dist -outfile hello.jar -v

$ tree
.
├── classes
│   └── helloworld
│       ├── HelloWorld$1.class
│       └── HelloWorld.class
├── dist
│   └── hello.jar
└── src
    └── helloworld
        └── HelloWorld.java

5 directories, 4 files

$ java -jar dist/hello.jar