Tôi đang làm theo hướng dẫn tại oracle và tôi nhận được thông báo lỗi này khi tôi cố gắng chạy đầu ra tệp jar sau khi mã được biên dịch.JavaFX và biên dịch HelloWorld với Ant
Error: Could not find or load main class HelloWorld
Để thiết lập một môi trường phát triển java, tôi đã đến oracle và tải Java SE Development Kit của họ và bỏ nó vào /usr/lib/jvm/jdk1.8.0_45
và sau đó chỉ vào nó trong file build.xml như đã được chỉ định.
Trong sau hướng dẫn này, tôi có một thư mục dự án với mã/script sau:
(ví dụ/src/HelloWorld.java)
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);
}
}
(ví dụ/build.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<project name="JavaFX Hello World Example" default="default" basedir="."
xmlns:fx="javafx:com.sun.javafx.tools.ant">
<property name="JAVA_HOME" value="/usr/lib/jvm/jdk1.8.0_45"/>
<property name="build.src.dir" value="src"/>
<property name="build.classes.dir" value="classes"/>
<property name="build.dist.dir" value="dist"/>
<target name="default" depends="clean,compile">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${JAVA_HOME}/lib/ant-javafx.jar"/>
<fx:application id="HelloWorldID"
name="JavaFXHelloWorldApp"
mainClass="HelloWorld"/>
<fx:resources id="appRes">
<fx:fileset dir="${build.dist.dir}" includes="HelloWorld.jar"/>
</fx:resources>
<fx:jar destfile="${build.dist.dir}/HelloWorld.jar">
<fx:application refid="HelloWorldID"/>
<fx:resources refid="appRes"/>
<fileset dir="${build.classes.dir}"/>
</fx:jar>
<fx:deploy width="300" height="250"
outdir="." embedJNLP="true"
outfile="helloworld">
<fx:application refId="HelloWorldID"/>
<fx:resources refid="appRes"/>
<fx:info title="JavaFX Hello World Application"
vendor="Oracle Corporation"/>
</fx:deploy>
</target>
<target name="clean">
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${build.dist.dir}"/>
<delete>
<fileset dir="${build.classes.dir}" includes="**/*"/>
<fileset dir="${build.dist.dir}" includes="**/*"/>
</delete>
</target>
<target name="compile" depends="clean">
<javac includeantruntime="false"
srcdir="${build.src.dir}"
destdir="${build.classes.dir}"
fork="yes"
executable="${JAVA_HOME}/bin/javac"
source="1.8"
debug="on">
</javac>
</target>
</project>
Dưới đây là một số thông tin gỡ lỗi rất nhẹ có khả năng gây các vấn đề:
$ java -jar HelloWorld.jar
Error: Could not find or load main class HelloWorld
$ jar tvf HelloWorld.jar
0 Mon Apr 27 00:57:58 CDT 2015 META-INF/
113 Mon Apr 27 00:57:58 CDT 2015 META-INF/MANIFEST.MF
1014 Mon Apr 27 00:57:58 CDT 2015 HelloWorld$1.class
1436 Mon Apr 27 00:57:58 CDT 2015 HelloWorld.class
(HwlloWorld.jar META-INF/MANIFEST.MF)
Manifest-Version: 1.0
JavaFX-Version: 8.0
Class-Path:
Created-By: JavaFX Packager
Main-Class: HelloWorld
Điều gì còn thiếu?
Tôi vừa thử nó. Hoạt động không có vấn đề gì trên Win7. Bạn có thể nén toàn bộ nội dung của thư mục mẫu và đưa nó lên web không? – Roland
Cảm ơn thông tin chi tiết đó. Bạn có thể chạy 'echo% CLASSPATH%' trên hệ thống của bạn và chia sẻ đầu ra không? Classpath của tôi không được thiết lập có thể có nghĩa là tôi cần phải đặt nó trong build.xml thay vào đó (hoặc thử chơi với biến để xem nó có giúp ích không) – Ninjaxor
Toàn bộ dự án mã có sẵn tại đây https://github.com/thenotary/ helloJavafx – Ninjaxor