Błąd lokalizacji przy uruchamianiu pliku *.jar JavyFX

0

Napisałem aplikację w JavieFX. Uruchamiam ją w Eclipsie i wszystko działa. Chciałem teraz utworzyć z niej plik *.jar. Jednak po odpaleniu jara pojawia mi się taki błąd:
user image

Struktura mojego projektu:
user image

Plik main:

public class Main extends Application {

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

	@Override
	public void start(Stage primaryStage) throws Exception {
		FXMLLoader loader = new FXMLLoader(this.getClass().getResource("/fxml/MainScreen.fxml"));
		StackPane stackPane = loader.load();
		Scene scene = new Scene(stackPane, 400, 400);
		primaryStage.setScene(scene);
		primaryStage.setResizable(false);
		primaryStage.setTitle("Lectures");
		primaryStage.show();
	}
}

Czytałem na Stack Overflow, że może być to spowodowane niepoprawnym zapisem tej części:

getResource("/fxml/MainScreen.fxml")
jednak wydaje mi się, że tu jest OK. W pliku jar wszystkie fxml są na swoim miejscu.

Co jest nie tak?

0

Na oko wygląda ok. Podepnij się debuggerem do tego jara i zobacz z jakim parametrem został utworzony ten FXMLLoader i dlaczego ścieżka nie pasuje. Jeśli nie wiesz jak debugować zdalnie to dodaj sobie linijkę, która wypisze Ci ten URL otrzymywany z this.getClass().getResource("/fxml/MainScreen.fxml"). Jeżeli URL jest zgodny to problem leży prawdopodobnie gdzieś w procesie budowania jara. Czego używasz do budowania?

0

Nie wiem, co znaczy:

Podepnij się debuggerem do tego jara

Włączyłem debugowanie w Eclipsie, ustawiłem w tej linijce breakpointa:

FXMLLoader loader = new FXMLLoader(this.getClass().getResource("/fxml/MainScreen.fxml"));

i otrzymałem takie wartości:
user image

Nie wiem, czy to ma znaczenie, ale FXMLe w pliku jar znajdują się tylko w tym folderze

lectures.jar\resources\fxml

A jara zbudowałem tak: Export -> Runnable JAR File -> Package required libraries into generated JAR

1

Ale pisałeś, że z poziomu eclipse wszystko działa więc spodziewałem się, że taki będzie rezultat. Musisz uruchomić Twojego jara i jego debugować, przy standardowej konfiguracji eclipse z niego nie korzysta.
Debugowanie zdalnych aplikacji masz tu:
http://stackoverflow.com/questions/1732259/eclipse-how-to-debug-a-java-program-as-a-jar-file
i drugi sposób tu:
https://dzone.com/articles/how-debug-remote-java-applicat

0

Dzięki za wytłumaczenie jak debugować JARa. Nie wiedziałem, że takie coś można robić, kiedyś się przyda :)

Rzeczywiście w pliku JAR nie wykrywa lokalizacji:
user image
user image

Wychodzi na to, że błąd ze ścieżką... Czyli ten fragment jest błędny?

getResource("/fxml/MainScreen.fxml")

Jak można to naprawić?

1

Problem leży gdzieś w procesie budowania jara. Niestety nigdy nie budowałem wykonywalnych jarów w sposób przez Ciebie podany więc nie za bardzo potrafię Ci pomóc. Mogę jednak zasugerować sposób, który ja stosuję. Ogólnie tak się powinno wg oracle budować aplikacje javafx:
http://wiki.eclipse.org/Efxclipse/Tutorials/Tutorial1
Wygenerowany skrypt anta można dość łatwo skonfigurować, żeby radził sobie z dodatkowymi dll czy też zależnościami mavena, ewentualnie tworzył plik exe z windowsowym instalatorem. Więcej na ten temat (dość obszernie) tutaj:
http://docs.oracle.com/javafx/2/deployment/jfxpub-deployment.htm
Jakbyś miał problemy z plikiem build.fxbuild to utwórz nowy projekt JavaFX i go sobie skopiuj. Jakbyś nie mógł zmusić anta do wkopiowania zależności mavena do jara to daj znać, mam gdzieś skrypt do deployowania aplikacji pod Windows

0

Dopiero teraz miałem chwilę czasu, żeby się tym zająć.

Zrobiłem tak, jak napisałeś z tym plikiem build.fxbuild i zadziałało!!!

Dziękuję za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1