0

I have created a very basic JavaFX application

// Viewer.java
package crossjavafx;

public class Viewer {
    public static void main(String[] args) {
        MainViewer.main(args);
    }
}
// MainViewer.java
package crossjavafx;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainViewer extends Application {

    @Override
    public void start(Stage stage) {
        try {
            System.out.println("Hello from Viewer");
            Group root = new Group();
            Scene scene = new Scene(root, 400, 300);
            stage.setTitle("Hello");
            stage.setScene(scene);
            stage.show();
        } catch (final Exception e) {
            System.exit(1);
        }
    }

    public static void main(String args[]){
        launch(args);
    }
}

there is also simple pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test</groupId>
    <artifactId>crossjavafx</artifactId>
    <version>0.1.0-SNAPSHOT</version>

    <name>${project.artifactId}</name>
    <description>${project.artifactId}</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

I have built it on Ubuntu 16.04 using mvn and:

 ./java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

I have also installed openjfx and libopenjfx packages:

libopenjfx-java/xenial,xenial,now 8u60-b27-4 all [installed]
libopenjfx-jni/xenial,now 8u60-b27-4 amd64 [installed,automatic]
openjfx/xenial,now 8u60-b27-4 amd64 [installed]

The application is built successfully, but fails to launch. The process hangs before printing "Hello from Viewer". I start it:

/usr/lib/jvm/java-8-openjdk-amd64/bin/java -cp crossjavafx-0.1.0-SNAPSHOT.jar crossjavafx.Viewer

I do not have problem to start a non-javafx application build in the same way, even when calling its class from the same JAR, so I suppose there is something wrong with my JavaFX installation.

I also tried to build it and run using Java 8 Oracle SDK, with the same result. Is there anything missing in my JavaFX installation that I forgot?

Edit

I have built and attempted to run it using Java 8 Oracle, printing the stacktrace. I got:

Hello from Viewer
Framebuffer object format is unsupported by the video hardware. (GL_FRAMEBUFFER_UNSUPPORTED)(FBO - 820)
Error creating framebuffer object with TexID 1)
[VGL] ERROR: OpenGL error 0x0502
[VGL] ERROR: in readPixels--
[VGL]    475: Could not Read Pixels
Piotr G
  • 959
  • 1
  • 7
  • 25
  • `catch (final Exception e)` are you sure you're not falling into this? Because if there's an exception it could be worth it to see *what* exception it is. Put a `e.printStackTrace()` in the `catch` body, before exiting, to be sure. – Federico klez Culloca Nov 12 '19 at 15:23
  • Well, if it was an exception, I suppose I would just exit with code 1. I will doublecheck that, as you suggested, unfortunately I can't do it today. – Piotr G Nov 12 '19 at 15:29

1 Answers1

0

I had a similar issue and added the following parameters as VM arguments "-Djavafx.platform=monocle -Dmonocle.platform=X11 -Dembedded=monocle". As I am using eclipse I added it to the Run configuration Run -> Run configuration ... Run Configurations in eclipse

I found that hint at https://wiki.openjdk.java.net/display/OpenJFX/Building+the+OpenJFX+embedded+stack+for+Linux+desktop