JavaFX Raspberry Pi meldet "Hauptklasse konnte nicht gefunden oder geladen werden"

DerMauri

Mitglied
Hi,

ich habe mir eine leere JavaFX Anwendung von meinem Windows-Eclipse generieren lassen und möchte diese nun auf meinem Rapsberry Pi laufen lassen.
Sobald ich das JAR-File aber auf dem Raspberry Pi ausführe erhalte ich diese Fehlermeldung:
Bash:
root@homeserver:/tmp# java -jar foo.jar
Fehler: Hauptklasse application.Main konnte nicht gefunden oder geladen werden

Auf meiner Suche nach einer Lösung fand ich leider nur Hinweise darauf, dass er PATH möglicherweise fehlerhaft gesetzt sei bzw. die Java Version nicht korrekt sei. Dies kann ich meines Erachtens aber ausschließen, denn:
Bash:
root@homeserver:/tmp# java -version
java version "1.8.0_122-ea"
Java(TM) SE Runtime Environment (build 1.8.0_122-ea-b04)
Java HotSpot(TM) Client VM (build 25.122-b04, mixed mode)

Wie sieht die Java-Anwendung also aus? Wie gesagt: es ist eine leere Anwendung mit diesem Code:
Java:
package application;
   
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;


public class Main extends Application {
   @Override
   public void start(Stage primaryStage) {
       try {
           BorderPane root = new BorderPane();
           Scene scene = new Scene(root,400,400);
           scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
           primaryStage.setScene(scene);
           primaryStage.show();
       } catch(Exception e) {
           e.printStackTrace();
       }
   }
   
   public static void main(String[] args) {
       launch(args);
   }
}

Möglicherweise habe ich ja einen Fehler beim erstellen des JAR-Files gemacht. Daher hier noch kurz beschrieben, wie ich das angestellt habe:

upload_2017-1-3_9-25-43.png

upload_2017-1-3_9-26-27.png

Fehler gab es dabei keine.

Ich bin leider ratlos, woran es noch liegen könnte :(. Über jede Idee würde ich mich sehr freuen und danke schon mal herzlich!

Grüße
Mauri
 

DerMauri

Mitglied
Es handelt sich um Java von Oracle, 32bit ARM Architektur:
JDK Linux ARM 32-bit 8u122 Build b04.
 
Zuletzt bearbeitet:

dzim

Top Contributor
hast du dir mal das JAR-File angeschaut? Vielleicht wurde das Class-File ja wirklich nicht korrekt reinkopiert, beim Build-Prozess. Ich geb zu: So was hatte ich schon lange nicht mehr. :) Ich verwende fast nur noch Maven für meine Projekte. Dort nutze ich das Shade-Plugin (Fat-JARs) und gebe die Main-Klasse an...
 

DerMauri

Mitglied
Das Jar-File sieht hinsichtlich der Main.class gut aus:
upload_2017-1-3_10-35-46.png
Übrigens: wenn ich das foo.jar bei mir lokal (Windows 10) ausführe, startet die Anwendung ordnungsgemäß. Erst auf dem Raspberry Pi tritt das Problem auf.
 

DerMauri

Mitglied
Auf meinem Windows ist ein 64-bit Java installiert, auf dem Raspberry Pi nur ein 32-bit Java.
Ich erstelle das JAR auf dem 64-Bit-Windows-Java und möchte es auf dem 32-bit-Raspberry-Java ausführen. Kann das eine Ursache sein?
Die Fehlermeldung klingt auf jeden Fall nicht danach.
 

dzim

Top Contributor
Hm. Ich bin mir ehrlich gesagt nicht zu 100% sicher, aber das könnte es sein. Hast du mal versucht, eine reine Konsolen-Anwendung so zu bauen und auf dem Raspi zu starten? Also ohne JavaFX?
 

DerMauri

Mitglied
Ich habe gerade
  1. in einer VM das aktuellste 32bit Java auf Windows installiert
  2. das Jar File gebaut
  3. Auf der 32 Bit Windows Umgebung getestet --> läuft
  4. Auf der 64 Bit Windows-Umgebung getestet --> läuft.
  5. Auf den Raspberry übertragen und dort ausgeführt --> gleicher Fehler (Fehler: Hauptklasse application.Main konnte nicht gefunden oder geladen werden)

:mad:

Dann habe ich eine "normale" (nicht JavaFX) Anwendung erstellt (übrigens auf dem 64Bit-Windows-Java) und siehe da: die Funktioniert auf dem Raspbery Pi! o_O
--> Die 64-Bit vs. 32 Bit Thematik scheint es also nicht zu sein, sondern eine Java vs. JavaFX Problematik.

Wenngleich sich das Gefühl breit macht, der Lösung etwas näher gekommen zu sein, so fehlt mir leider eine Idee für den nächsten Schritt.

Grüße
Mauri
 

dzim

Top Contributor
Hm.... Kann es sein, dass JavaFx in dem ARM-Build schlicht nicht enthalten ist? Es gab da doch mal so einen "Puff" deswegen. Und daher gibt es ein Embedded-SDK (http://gluonhq.com/labs/javafxports/get/) und die OpenJDK/OpenJFX-Builds.
Installiere mal openjdk und openjfx (beide in der Java-Version 8). über
sudo apt[-get] install openjdk-8-jdk openjfx und setze sie als Default.

Oder versuche mal einen regulären Build von Oracle (und nicht de Early Access). Version 111 ist aktuell mit
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

#Hinweis: Lies dir bitte mal den StackOverflow-Artikel durch
http://stackoverflow.com/questions/36961054/can-javafx-be-used-on-raspberry-pi
JavaFX wurde aufgrund irgendwelcher Oracle-internen Nörgeleien vom Embedded Build ausgeschlossen.

#edit: Installations-Anweisung, wenn du den Oracle-Build mit dem von Gluon erstellten JavaFX-Build verwenden möchtest
http://docs.gluonhq.com/charm/4.2.0/#_embedded
Ansonsten halt OpenJFX installieren, wenn verfügbar.
 
Zuletzt bearbeitet:

DerMauri

Mitglied
Der Hinweis mit openjfx war gut!

Bei dem Versuch opejfx zu installieren, fand ich die Datei jexec und habe einfach mal
Bash:
/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/lib/jexec ./foo.jar
versucht. Und es funktioniert!!:)

Hast Du eine Idee, woran es gelegen haben könne (openjfx habe ich übrigens nicht installiert)?

Vielen lieben Dank schon mal und Grüße
Mauri
 

Ähnliche Java Themen

Neue Themen


Oben