Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compile code using JavaFX 2.0 (using command line)

I wonder how to compile code using JavaFX, from a Windows shell.

I have this code in fxservidor.java:

public class Fxservidor extends Application {

    /**
     * @param args the command line arguments
     */
    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) {
                Synthetizer os = new Synthetizer("Ximena");                
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}
like image 249
Jhuaraya Avatar asked Feb 24 '12 18:02

Jhuaraya


People also ask

How use JavaFX command line?

Step 1: Type "cd" and then write the path starting from "C:" (C drive) to the location where you have saved your code above in . java format. Step 2: Then you need to press Enter so that the command line would open that path. If it yields an error, please recheck the path you passed.

How do I compile a Java project from the command line?

Type 'javac MyFirstJavaProgram. java' and press enter to compile your code. If there are no errors in your code, the command prompt will take you to the next line (Assumption: The path variable is set). Now, type ' java MyFirstJavaProgram ' to run your program.


3 Answers

Oracle Java 8

If you are using Oracle Java 8 or newer, as pointed out by cayhorstmann in his answer, JavaFX classes are now on the default runtime classpath for an Oracle Java implementation. You can just run javac and java on your program and the JavaFX classes will be found as expected, just like any other class in the JRE.

javac Fxservidor.java
java Fxservidor

OpenJDK 8

If you are using OpenJDK 8, you will (currently) need to build the JavaFX sources from the OpenJFX repository and and place the resultant jfxrt.jar on your classpath similar to the description for Java 7 defined in this answer.

JavaFX 2.x / Java 7

You use the Java Compiler to compile JavaFX programs:

"%JDK_HOME%\bin\javac" -classpath "%JAVAFX_SDK_HOME%\rt\lib\jfxrt.jar" fxservidor.java 

Replace the JDK_HOME and JAVAFX_SDK_HOME placeholders with the paths to your installed JDK and JavaFX SDK respectively.

A sample windows batch script for JavaFX 2.x command line development and deployment packaging is provided here.

Here is a command I ran on my machine to compile your application (you need to adjust the classpath for your environment):

javac -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor.java

And here is a command I used to run the compiled class:

java -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar;." Fxservidor

Note the ;. tokens used to append the current directory to the classpath of the java execution command in Windows (if using a Unix variant, then use :. instead of ;.).

Sample App

Here is a modified version of your program which will compile:

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 Fxservidor 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();
    }

}

Deployment Recommendation

If you are deploying applications to users, even with Java 8, it is recommended that you package applications using relevant packaging tools (e.g. JavaFX ant tasks, javafxpackager, javafx-maven-plugin or javafx-gradle-plugin).

If you just want to do some quick command line development and testing, of small programs, those additional packaging tools are not needed and you can just use the simple steps in this answer.

like image 81
jewelsea Avatar answered Oct 01 '22 20:10

jewelsea


In macbook, osx, etc, you can compile:

javac -cp "/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfxrt.jar" Fxservidor.java

and run:

java -cp ".:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfxrt.jar" Fxservidor

Note the .: instead of .;

like image 43
Euler Geek Avatar answered Oct 01 '22 21:10

Euler Geek


javac -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor.java

I ran the above command on Ubuntu Linux with JavaFX2.0 beta it compiled it's class files but when I tried to run it with this command it did not work.

java -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor

This is the error message I get:

Error: Could not find or load main class Fxservidor

like image 5
entricular Avatar answered Oct 01 '22 22:10

entricular