Builder nötig ?

Bitte aktiviere JavaScript!
Hallo zusammen,

ich habe ein Hobby-Projekt, welches folgende Struktur besitzt:



die roten Felder sind klassische Pakete mit den Klassen.
Im Ordner sind resources wie .properties Dateien in hellblau und das gelbe Feld ist der Ordner für alle .fxml. Ich arbeite mit JavaFX, wenn das relevant ist.

Hinzu kommt, dass ich externe Libs eingebunden habe. Jetzt möchte ich das ganze Projekt so zusammen schnüren, dass ich das als .jar erstellen kann. Bisher ist das nicht möglich weil die Jar nach dem Erstellen keine Pfade mehr findet. Brauche ich jetzt einen Builder um das zu bewerkstelligen oder kann ich auch die Boardmittel von Eclipse verwenden?
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Der Einsatz eines Build-Tools ist bei sowas generell zu empfehlen, Eclipse kann das aber auch von Haus aus.

Bei Problemen mit Pfaden kann der Fehler aber auch in deinem Programm liegen, welche Pfade findet der denn nicht?
 
Sorry, dass ich erst so spät antworte, war noch arbeiten.
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: java.util.MissingResourceException: Can't find bundle for base name language.lang, locale ger
at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
at java.util.ResourceBundle.getBundleImpl(Unknown Source)
at java.util.ResourceBundle.getBundle(Unknown Source)
at language.Language.<init>(Language.java:19)
at matchMakerMain.MatchMaker_Main.start(MatchMaker_Main.java:20)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
... 1 more
Exception running application matchMakerMain.MatchMaker_Main

Will ungern die Pfade permanent ändern für die Variante in der IDE und für das Jar.
 
Code:
package language;

import java.util.Locale;
import java.util.ResourceBundle;

public class Language {
   
    private Locale locale;
    private ResourceBundle bundle;
    public static String currentLanguage;
   
    public ResourceBundle getBundle() {
        return bundle;
    }
   
    public Language(String lang) {
        currentLanguage = lang;
        locale = new Locale(lang);
        bundle= ResourceBundle.getBundle("language.lang",locale);
    }
}
Code:
package matchMakerMain;

import java.util.prefs.Preferences;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import language.Language;


public class MatchMaker_Main extends Application{

    private static final String version = "4.1_16.01.2018";

    @Override
    public void start(Stage stage) throws Exception {
        Preferences pref = Preferences.userNodeForPackage(MatchMaker_Main.class);
       
        FXMLLoader loader = new FXMLLoader(getClass().getResource("/matchMakerView/MatchMaker_MainScene.fxml"), new Language(pref.get("Language","GER")).getBundle());
       
        Parent root = loader.load();
        Scene scene = new Scene(root);
       
        stage.setScene(scene);
        stage.setTitle("AgeMaker "+version+"@Hades85");
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 
Der korrekte Local-ID wäre "de_DE", nicht "ger". Könnte damit zusammenhängen.

Kannst du ansonsten die Datei direkt laden, ohne ResourceBundle?
 
Also in Eclipse kann ich die ohne Murksen starten. Das ändern der Local-ID hat aber auch nichts gebracht. Zeigt den selben Fehler an wenn ich das Projekt exportiere.
 
Das kann ich dir nicht sagen, weil meine FXML-Dateien alle Platzhalter besitzen und die gefüllt werden mit der jeweiligen Language Property. Das heisst ohne ResourceBundle kann ich keine FXML laden.
 
Der Fehler ist, dass eine Datei nicht gefunden wird: die .properties, mit den entsprechenden Übersetzungen.
Versuch diese mal ganz normal mit getResource zu laden.
 
Der Fehler hat sich doch verändert nachdem ich Locale im Namen geändert habe:
java.util.MissingResourceException: Can't find bundle for base name queries, locale de_DE
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException:
file:/C:/Users/marco/Desktop/Test.jar!/matchMakerView/MatchMaker_Tab_Match.fxml
file:/C:/Users/marco/Desktop/Test.jar!/matchMakerView/MatchMaker_MainScene.fxml:51

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2571)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.access$2700(FXMLLoader.java:103)
at javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:1143)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:746)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at matchMakerMain.MatchMaker_Main.start(MatchMaker_Main.java:22)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
... 1 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2566)
... 18 more
Caused by: java.lang.NullPointerException
at database.Database.loadPlayer(Database.java:111)
at database.Database.initDatabase(Database.java:60)
at database.Database.getInstanz(Database.java:46)
at mainController.Match_Controller.initialize(Match_Controller.java:55)
... 28 more
Exception running application matchMakerMain.MatchMaker_Main
Jetzt findet er die Property mit meinen DB Querys nicht.


EDIT: private final String ressourcePath = "resources\\queries\\";
 
Code:
private void loadQueryBundle() {
        try {
            File file = new File(ressourcePath);
            URL[] urls = { file.toURI().toURL() };
            ClassLoader loader = new URLClassLoader(urls);
            queryBundle = ResourceBundle.getBundle("queries", Locale.getDefault(), loader);

        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
 
Code:
private void loadQueryBundle() {
        try {
            File file = new File(ressourcePath);
            URL[] urls = { file.toURI().toURL() };
            ClassLoader loader = new URLClassLoader(urls);
            queryBundle = ResourceBundle.getBundle("queries", Locale.getDefault(), loader);

        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
Sowas geht in jedem Fall schief, warum dieser Umweg über File -> URI -> URL -> ClassLoader?
 
Weil ich ehrlich gesagt keinen anderen Weg sehe? Wieso geht sowas schief?
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben