Problem mit *.properties

Tach! :slight_smile:

Eine Fehlermeldung ist auf mich zugekommen, wie es aussieht, hier:

Exception in thread „main“ java.lang.ExceptionInInitializerError
at medienverwaltung.DateienEinlesen.init(DateienEinlesen.java:81)
at medienverwaltung.DateienEinlesen.main(DateienEinlesen.java:65)
Caused by: java.util.MissingResourceException: Can’t find bundle for base name MultiMediaResources, locale de_DE
at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
at java.util.ResourceBundle.getBundleImpl(Unknown Source)
at java.util.ResourceBundle.getBundle(Unknown Source)
at medienverwaltung.Konstanten.(Konstanten.java:31)
… 2 more

Ich habe eine Datei mit der Endung *.properties in gleichem Verzeichnis gespeichert, d.h.,
dass die andere Java-Dateien drin stehen.

MultiMediaResources.properties
MultiMediaResources_de_DE.porperties

Diese beiden sollen korrekt sein. Aber wieso geht das damit nicht? grümmel

Absätze aus einer Datei namens DateienEinlesen.java:

....
MenuItemHandler mih = new MenuItemHandler();
    // Namen der Operationen werden aus der Klasse Konstanten gelesen
    katMenu.add(this.createNewMenuItem(Konstanten.NeuKatalog, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.NeuBild, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.NeuTon, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.Kopie, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.Entfernen, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.Eintragen, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.Modifizieren, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.LabelName, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.LabelDatum, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.LabelBeschr, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.ButtonOk, mih));
    katMenu.add(this.createNewMenuItem(Konstanten.ButtonAbbruch, mih));
    // trage Menu in Menu-Balken ein
    menuBar.add(katMenu);
    ....
    // erzeugen eines neuen MenuItems
  private JMenuItem createNewMenuItem(String name, MenuItemHandler mih){
    JMenuItem result = new JMenuItem(name);
    result.addActionListener(mih);
    return result;
  }
}
...

Und eine Datei Konstanten.java:


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

/**
 * Diese Klasse enthält die Strings, die die Menu-Operationen in
 * der Verwaltungsoberfläche bezeichnen.
 */

public class Konstanten {
	public static String NeuKatalog;
	public static String NeuBild;
	public static String NeuTon;
	public static String Kopie;
	public static String Entfernen;
	public static String Eintragen;
	public static String Modifizieren;
	public static String LabelName;
	public static String LabelDatum;
	public static String LabelDatei;
	public static String LabelBeschr;
	public static String ButtonOk;
	public static String ButtonAbbruch;
	
	static {
		// statischer Klassenkonstruktor, der die konkreten Werte beim
		// Start der Anwendung lädt.
		ResourceBundle prb = ResourceBundle.getBundle("MultiMediaResources", Locale.getDefault());
		// TestAusgabe
		System.out.println("erzeugt ResourceBundle mit Locale: " + Locale.getDefault());
		// lese den Wert (Ressource) zu dem als ersten
		// Parameter angegebenen Schluessel
		NeuKatalog = setKey("NeuKatalog", prb);
		NeuBild = setKey("NeuBild", prb);
		NeuTon = setKey("NeuTon", prb);
		Kopie = setKey("Kopie", prb);
		Entfernen = setKey("Löschen", prb);
		Eintragen = setKey("Einfügen", prb);
		Modifizieren = setKey("Ändern", prb);
		LabelName = setKey("LabelName", prb);
		LabelDatum = setKey("LabelDatum", prb);
		LabelDatei = setKey("LabelDatei", prb);
		LabelBeschr = setKey("LabelBeschr", prb);
		ButtonOk = setKey("ButtonOk", prb);
		ButtonAbbruch = setKey("ButtonAbbruch", prb);
	}
	
	// Hilfsmethode zum Laden der Properties
	private static String setKey(String propertyName, ResourceBundle prb) {
		try {
			return prb.getString(propertyName);
		} catch (MissingResourceException mre) {
			System.out.println("keine Resource für "+propertyName+" gefunden!");
			return propertyName;
		}
	}
}
ResourceBundle prb = ResourceBundle.getBundle("MultiMediaResources", Locale.getDefault());

Kann das sein, dass diese nicht korrekt ist, wie „MultiMediaResources“ lautet?
Muß diese Name mit der Dateinendung .properties dazu sein?

Das sollte dir helfen: http://openbook.galileodesign.de/javainsel5/javainsel11_006.htm#Rxx747java11006040003921F020100

Es hat sich erledigt, denn ich habe es mit einem Programm Java-Editor kompiliert.
Es funktioniert. :wink:

L-ectron-X, danke für den Link! :wink: