JavaFX SceneBuilder 2.0

programmierer12

Bekanntes Mitglied
Hallo zusammen,
ich habe ein kleines Problem mit dem SceneBuilder 2.0 (zumindest denke ich das).
Ich habe vor kurzem einen neuen PC gekauft und auch dort wieder alle Programme installiert, auch den SceneBuilder, allerdings in der Version 2.0. Nun habe ich alle fxml dateien damit erstellt und wollte sie nun in Eclipse verarbeiten; Pustekuchen - Eclipse als auch Netbeans gaben mir einen Fehler:
Java:
javafx.fxml.LoadException: No resources specified.
/O:/Dateien/Schulsoftware/bin/application/Frame%201.fxml:18

	at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
	at javafx.fxml.FXMLLoader.access$100(Unknown Source)
	at javafx.fxml.FXMLLoader$Element.resolvePrefixedValue(Unknown Source)
	at javafx.fxml.FXMLLoader$Element.processValue(Unknown Source)
	at javafx.fxml.FXMLLoader$Element.processPropertyAttribute(Unknown Source)
	at javafx.fxml.FXMLLoader$Element.processInstancePropertyAttributes(Unknown Source)
	at javafx.fxml.FXMLLoader$ValueElement.processEndElement(Unknown Source)
	at javafx.fxml.FXMLLoader.processEndElement(Unknown Source)
	at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
	at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
	at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
	at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
	at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
	at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
	at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
	at javafx.fxml.FXMLLoader.load(Unknown Source)
	at application.Main.start(Main.java:14)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(Unknown Source)
	at com.sun.javafx.application.LauncherImpl$$Lambda$51/2128773217.run(Unknown Source)
	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Unknown Source)
	at com.sun.javafx.application.PlatformImpl$$Lambda$45/785992331.run(Unknown Source)
	at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source)
	at com.sun.javafx.application.PlatformImpl$$Lambda$47/1981609118.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source)
	at com.sun.javafx.application.PlatformImpl$$Lambda$46/940060004.run(Unknown Source)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
	at com.sun.glass.ui.win.WinApplication$$Lambda$37/1068934215.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Nun meine Frage:
An was kann das liegen und wie kann ich das Problem beheben?
Solltet ihr meinen Code brauchen kann ich den natürlich auch posten.

MFG
programmierer12
 

dzim

Top Contributor
Hab es so noch nicht gesehen, aber "No resources specified." klingt nach: Im FXML wurden Sprach-Properties verwendet, beim Start der Anwendung werden diese aber nicht im Klasspath gefunden. Aber das ist nur eine Vermutung.
 

programmierer12

Bekanntes Mitglied
Ja ich habe Sprach-Properties verwendet aber die Datei namens DE_de.properties liegt mit den Fxml und java dateien in ein und dem selben Ordner.
Falls es dir was bringt hier die Fxml und Main Datei:
Java:
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?scenebuilder-preview-i18n-resource DE_de.properties?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
  <children>
    <VBox prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="-2.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="2.0">
      <children>
        <MenuBar>
          <menus>
            <Menu mnemonicParsing="false" text="%key1">
              <items>
                <MenuItem mnemonicParsing="false" text="%key2" />
              </items>
            </Menu>
            <Menu mnemonicParsing="false" text="%key3" />
            <Menu mnemonicParsing="false" text="%key11">
              <items>
                <MenuItem mnemonicParsing="false" text="%key9" />
                <MenuItem mnemonicParsing="false" text="%key10" />
              </items>
            </Menu>
            <Menu mnemonicParsing="false" text="%key4">
              <items>
                <MenuItem mnemonicParsing="false" text="%key6" />
                <MenuItem mnemonicParsing="false" text="%key5" />
              </items>
            </Menu>
          </menus>
        </MenuBar>
        <Pane prefHeight="215.0" prefWidth="600.0">
          <children>
            <TextField alignment="CENTER" layoutX="200.0" layoutY="35.0" prefWidth="200.0" promptText="%key7" />
            <PasswordField alignment="CENTER" layoutX="200.0" layoutY="89.0" prefWidth="200.0" promptText="%key8" />
            <Button contentDisplay="CENTER" layoutX="200.0" layoutY="140.0" mnemonicParsing="false" prefWidth="200.0" text="%key9" />
            <Button contentDisplay="CENTER" layoutX="200.0" layoutY="180.0" mnemonicParsing="false" prefWidth="200.0" text="%key10" />
          </children>
        </Pane>
      </children>
    </VBox>
  </children>
</AnchorPane>

Java:
package application;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javax.swing.JOptionPane;

public class Main extends Application {
    
    public static Stage stage;
    
    @Override
    public void start(Stage primarystage) throws Exception {
        
        stage = primarystage;
        
        main();
        
        stage.show();
    
    }
    
    public void main(){
        
        try {
            generateSceneContent("Frame 1.fxml");
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    public static void zumain(){
        
        replaceSceneContent("Frame 1.fxml");
        
    }
    
        private static Initializable replaceSceneContent(String fxml){

		FXMLLoader loader = new FXMLLoader();

		try {

			loader = new FXMLLoader();
			InputStream in = Main.class.getResourceAsStream(fxml);
			loader.setBuilderFactory(new JavaFXBuilderFactory());
			loader.setLocation(Main.class.getResource(fxml));
			Parent page;
			try {
				page = (Parent) loader.load(in);
			} finally {
				in.close();
			}
			page.autosize();
			stage.getScene().setRoot(page);
			stage.sizeToScene();

		} catch (IOException e) {
			System.err.println(e.getMessage());
		}

		return (Initializable) loader.getController();
	}

	private Initializable generateSceneContent(String fxml) throws Exception {
		FXMLLoader loader = new FXMLLoader();
		InputStream in = getClass().getResourceAsStream(fxml);
		loader.setBuilderFactory(new JavaFXBuilderFactory());
		loader.setLocation(Main.class.getResource(fxml));
		Parent page;
		try {
			page = (Parent)loader.load(in);
		} finally {
			in.close();
		}
		Scene scene = new Scene(page, 522, 310);
		stage.setResizable(false);
		stage.setScene(scene);        
		stage.sizeToScene();
		stage.setTitle("Schülersoftware");
		return (Initializable) loader.getController();

	}
    
    public static void main(String[] args) {
        
    	//Nur Testweise zur Abfrage auf die Java-Version
    	
        if (System.getProperty("java.version").equals("1.8.0_20")) {
            
            System.err.println("Gestartet mit " + System.getProperty("java.version"));
            launch(args);
            
        }
        
        else{
            
            System.err.println("Gestartet mit " + System.getProperty("java.version"));
            JOptionPane.showMessageDialog(null, "Ihre Java Version ist veraltet, laden Sie die neueste Version unter\nhttp://www.java.com/download herunter um das Setup zu starten", "Veraltete Java-Version", JOptionPane.ERROR_MESSAGE);
            System.exit(0);
            
        }
        
    }
    
}

programmierer12
 

dzim

Top Contributor
Dann wird das Problem eher am Build liegen, oder? Ich vermute, das im dann ausgeführten Programm die Datei nicht entsprechend eingefügt wurde. Aber das ist nur ein "educated guess".

BTW: Das du einen MessageDialog von JOptionPane anzeigst... Aber ich weiss: Leider feiert eine Dialog-API erst mit Java8_u40 einen Einstand...

#edit (und schon bevor ich es gepostet hab):
Ich glaube das Problem liegt einfach in der Benennung deiner Datei! Es benötigt einen Fallback, den es in deinem Fall nie geben kann. Benenne die Datei mal um in irgendwas a la "string.properties" und füge eine "strings_de_DE.properties" hinzu ("DE_de" ist auch ein falscher ISO-Code: Erst die Sprache, dann das land - z.B. auch "de_CH").
In "string.properties" könnte die Dev-Sprache stehen - also meistens English. In "strings_de_DE.properties" dann enstprechende deutsch. Wobei ich i.d.R. nur den Sprachcode und eigentlich nie den Ländercode verwende, also "strings_de.properties".
Damit sollte das Problem behoben sein
 

programmierer12

Bekanntes Mitglied
Also ich habe das Problem behoben!:D:D:D

Ich habe die Fxml und die Properties Datei einfach anders eingelesen:
Java:
private Initializable generateSceneContent(String fxml) throws Exception {
		
		URL fxmlURL = getClass().getResource(fxml);
        
        ResourceBundle bundle = new PropertyResourceBundle(getClass().getResourceAsStream("string.properties"));

        FXMLLoader loader = new FXMLLoader(fxmlURL, bundle);
        Parent p = loader.load();

        Scene scene = new Scene(p, 600, 400);
		stage.setResizable(false);
		stage.setScene(scene);        
		stage.sizeToScene();
		stage.setTitle("Schülersoftware");
		
		return (Initializable) loader.getController();

	}

Doch nun noch eine kleine Frage:
Wie muss ich es jetzt anstellen, dass die Sprache automatisch/manuell geändert wird?

MFG
programmierer12
 

dzim

Top Contributor
Das ist recht einfach. Ich kenne es auf diese Art:
Neue Locale setzen (in Android bewirkt das schon die ganze Magic - nach einem neustart der Activity) und dann noch das neue ResourceBundle laden. Allerdings idealerweise mit
Java:
// "eu.my.package" ist das Package
//  "strings" der Name der Properties *OHNE* den "_de"-Teil und *OHNE* die Dateierweiterung ".properties"
// du musst nur den "Basis-Namen" angeben, alle anderen Datein müssen da sein:
// strings.properties; strings_de.properties, ...
String baseName = "eu.my.package.strings";

Locale locale = new Locale("de");

// das lädt jetzt die Datei "strings_de.properties"
ResourceBundle.getBundle(baseName, locale);

Danach musst du noch dein Update deiner Texte triggern und du bist fertig.
 

dzim

Top Contributor
Wie gesagt: eine Locale baust du im Code via new Locale("<your-ISO-language>"). Nichts anderes.
Und für jede Sprache, die du unterstützen willst, benötigst du die enstsprechende strings.properties (das hier wäre der Fallback, sollte die Sprache unbekannt sein). Denk drann, dass du beim Start der Anwendung immer mit der default-Locale anfängst (also die, die im OS eingestellt wurde). Ansonsten ist das Sprachdatei-Schema immer (wenn du das von mir vorgeschlagene "strings"-Präfix verwendest) "strings[_<ISO-Language-Code>[_<ISO-Country-Code>]].properties". Und das war es dann auch schon.
Wie gesagt, musst du dann noch deine UI updaten, das alle UI-Elemente auch die entsprechende Sprache verwenden, aber ja. Mehr ist es nicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin StringGrid in SceneBuilder und javaFX AWT, Swing, JavaFX & SWT 3
Juelin JavaFX Netbeans Aufruf Funktion aus Scenebuilder AWT, Swing, JavaFX & SWT 8
Juelin SceneBuilder und Objektname AWT, Swing, JavaFX & SWT 11
MiMa Darstellung von FXML ateien nicht korrekt (SceneBuilder) AWT, Swing, JavaFX & SWT 2
Encera TableView Zeilen als Spalten im SceneBuilder AWT, Swing, JavaFX & SWT 0
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
thor_norsk JavaFX, FXML und SceneBuilder AWT, Swing, JavaFX & SWT 6
melaniemueller JavaFX Taschenrechner mit SceneBuilder AWT, Swing, JavaFX & SWT 12
L JavaFX JavaFX, MVVM und SceneBuilder AWT, Swing, JavaFX & SWT 4
C JavaFX Veränderungen in Scenebuilder in Eclipse als Quellcode anzeigen lassen AWT, Swing, JavaFX & SWT 11
S SceneBuilder gridpane erweitern AWT, Swing, JavaFX & SWT 0
K JavaFX Fenstergröße ändert sich (Gluon - SceneBuilder) AWT, Swing, JavaFX & SWT 23
J Bilder aus dem SceneBuilder werden in der Jar nicht dargestellt AWT, Swing, JavaFX & SWT 4
N SceneBuilder wie auf Attribute zugreifen? Diese sind immer null. AWT, Swing, JavaFX & SWT 6
C JavaFX Edit TableView in Verbindung mit SceneBuilder AWT, Swing, JavaFX & SWT 1
F FXML Datei aus dem SceneBuilder in Eclipse aufrufen AWT, Swing, JavaFX & SWT 1
J SceneBuilder TableView Checkbox AWT, Swing, JavaFX & SWT 1
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
B Java FX FXML Textarea SceneBuilder als XML Editor AWT, Swing, JavaFX & SWT 1
M Java FX SceneBuilder 2.0, FXML, Controller AWT, Swing, JavaFX & SWT 1
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
J JavaFx/SceneBuilder/Felder beim verlassen prüfen AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX SceneBuilder download AWT, Swing, JavaFX & SWT 7
V JavaFX SceneBuilder startet nicht AWT, Swing, JavaFX & SWT 18
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Drag and Drop mit JAVAFX- Scenebuilder AWT, Swing, JavaFX & SWT 1
H JavaFx - SceneBuilder - Connect ControllerClass AWT, Swing, JavaFX & SWT 0
R JavaFX Mein SceneBuilder Projekt AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben