AWT ActionEvent wirft NullPointerExpection Warum?

xJan45x

Aktives Mitglied
Hay,
Ich Programmiere seit kurzen ein Spiel. Und zwar habe ich ein JFrame angelegt das "Einstellung" heißt. Dort gibt es dann ein JButton der "vSync" heißt wenn man denn anklickt soll eigentlich ein Eintrag in einer Properties Datei geändert werden in meiner GameConsole ein Nachricht erscheinen und der Text er auf denn Button steht geändert werden. Es sieht eigentlich normal aus. Aber wenn ich denn JButton vSync anklicke komme ne NullPointerExpection. Aber Warum? Ich habe auch schon im Netz gesucht aber nix gefunden.
Das ActionEvent:
Java:
	@Override
	public void actionPerformed(ActionEvent e) {
		Object source = e.getSource();
		if(source == vSync) {
                            config.load();
			if(config.pro.getProperty("isSync") == "true") {
				config.pro.setProperty(config.pro.getProperty("isSync"), "false");
				config.save();
				vSync.setText("VSync: Aus");
				GameConsole.sendMessage("[AccessNow] The Property of Type 'isSync' changed to 'false'");
			}else{
				config.pro.setProperty(config.pro.getProperty("isSync"), "true");
				config.save();
				vSync.setText("VSync: An");
				GameConsole.sendMessage("[AccessNow] The Property of Type 'isSync' changed to 'true'");
			}
		}
	}

Und hier die load() und save() Methoden
Java:
	private String currentUser = System.getProperty("user.home");
	private File roaming = new File(currentUser + "/AppData/Roaming");
	private File accessnowfolder = new File(roaming + "/AccessNow");
	private File file = new File(accessnowfolder, "conf.properties");
	private OutputStream fos = null;
	private FileInputStream fis = null;
        
        public Configuration() {
            	fos = new FileOutputStream(file);
		fis = new FileInputStream(file);
        }
	public void load() {
		try {
			pro.load(fis);
		} catch (IOException e) {
			GameConsole.sendMessage("[AccessNow] IOException !Delete The AccessNow Folder!");
		}
	}

	public void save() {
		try {
			pro.store(fos, "The Configurtion of AccessNow!");
		} catch (IOException e) {
			GameConsole.sendMessage("[AccessNow] IOException! Delete The AccessNow Folder!");
		}
	}

Ich habe keine Idee wie ich das beheben kann
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Stacktrace ? Zeile in der die Exeption Fliegt ? Zaubern können wir auch nicht ^^
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
Sorry, Habe ich vergessen zu posten
NullPointerExpection:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at de.jan.accessnow.gamesettings.GeneralOptions.actionPerformed(GeneralOptions.java:65)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Da wo der Fehler liegt komme ich auf die load() Methode zurück die die Properties eigentlich Laden sollte.
Wenn ich load() wegmache dann ist der Fehler eine Zeile tiefer. Bei getProperty("isSync") == "true"
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Ich vermute start das führt dann zu diesem Aufruf ?

Java:
	public void load() {
		try {
			pro.load(fis);
		} catch (IOException e) {
			GameConsole.sendMessage("[AccessNow] IOException !Delete The AccessNow Folder!");
		}

falls ja , fliegt die Exeption mit dem besagten Text ? falls nein ist der Stream vielleicht nicht initialisiert ?

bzw. lass dir an dieser stelle mal den stacktrace ausgeben , auf der Konsole und poste diesen

oder vielleicht der Pfad hier inkorrekt ?

Java:
	private File file = new File(accessnowfolder, "conf.properties");
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
Wenn ich davor noch config.init(); schreibe wird der FileOutputStream und FileInputStream initalsiert. Normaler weiße müste er aber initalsiert sein weil die Methode beim Start des Programms ausgerufen wird.
 

kaoZ

Top Contributor
also lag es am Stream ? Funktioniert es jetzt ?

falls ja debug mal die aufrufhierarchie der init() Methode
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
Nein es geht nicht ich habe mal versucht anstadt mit InputStream zu laden mit ein Reader versucht es sieht jetzt so aus:
Java:
	private String currentUser = System.getProperty("user.home");
	private File roaming = new File(currentUser + "/AppData/Roaming");
	private File accessnowfolder = new File(roaming + "/AccessNow");
	private File accessfile = new File(accessnowfolder, "conf.properties");
			try {
				Reader stream = new FileReader(accessfile);
				config.pro.load(stream);
				stream.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
Der Fehler ist immer noch der gleiche er weist auf "config.pro.load(reader);" zurück
 

kaoZ

Top Contributor
Poste mal den Stacktrace wenn du das hier

Java:
GameConsole.sendMessage("[AccessNow] IOException !Delete The AccessNow Folder!");

durch ein einfaches e.printStackTrace(); ersetzt.

ich vermute ja es liegt am Pfad des files.....
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
Ich habe es mal gemacht folgener Fehler kommt:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at de.jan.accessnow.utils.Configurtion.load(Configurtion.java:69)
	at de.jan.accessnow.gamesettings.GeneralOptions.actionPerformed(GeneralOptions.java:76)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
 

kaoZ

Top Contributor
at de.jan.accessnow.utils.Configurtion.load(Configurtion.java:69)

gleiche Zeile....

da muss vorher schon irgendwas nicht hinhauen , was passiert wenn du den aufruf der load methode auskommentierst oder mal alle trigger debuggst ?

startet die anwendung dann überhaupt ?

oder fliegt vielleicht an anderer stelle noch eine exeption , irgendwas scheint nichtn initialisiert zu sein , sonst musste den gesamten code der Klasse die die load methode aufruft mal posten .

du solltest auch mal die erzeugung der streams mit in den try/catch packen !

Java:
fos = new FileOutputStream(file);
		fis = new FileInputStream(file);

sonst fliegt da auch keine exception wenn es nicht mit im block steht....... deswegen wirst du auch nicht sehen ob es am file oder am stream liegt ;)
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
Die Anwendung startet erfolgreich ohne Probleme. Wenn ich dann auf Einstellungen klicke öffnet sich ein eines JFrame wenn ich da auf den Button "vSync: Aus" klickt dann kommt erst der Fehler.
Ich denk das es daran liegt das der die Properties nicht laden kann. Aber die Datei ist vorhanden. Und beim start wird sie ja auch geladen
 

kaoZ

Top Contributor
schreib das erzeugen des files und der streams einfach mal mit in den try/catch und schau ob dann mehr informationen im stack stehen. so kann man da echt nicht viel draus erkennen
 

xJan45x

Aktives Mitglied
Hier ist mal meine ganze Configurations Klasse die streams werden in der Methode init() initizaliert. Die init() Methode wird beim start der Anwendung aufgerufen
Java:
public class Configurtion {

	public Properties pro = null;
	private String currentUser = System.getProperty("user.home");
	private File roaming = new File(currentUser + "/AppData/Roaming");
	private File accessnowfolder = new File(roaming + "/AccessNow");
	private File file = new File(accessnowfolder, "conf.properties");
	private OutputStream fos = null;
	private FileInputStream fis = null;
	
	public Configurtion() {
		//nichts//
	}
	
	public void init() throws IOException {
		pro = new Properties();
		if(!accessnowfolder.exists()) {
			accessnowfolder.mkdir();
			fos = new FileOutputStream(file);
			fis = new FileInputStream(file);
			if(!(check())) {
				setFirstValues();
			}
		}
	}
	
	private void setFirstValues() throws IOException {
		load();
		pro.setProperty("inited", "true");
		pro.setProperty("console", "false");
		pro.setProperty("64bit-Modus", "false");
		pro.setProperty("useProxy", "Automatic");
		pro.setProperty("isSync", "true");
		pro.setProperty("LauncherOptions", "{'None'}");
		save();
		
	}
	
	private boolean check() {
		if(get("inited") != null) {
			return true;
		}else{
			return false;
		}
	}
	
	public String get(String key) {
		return pro.getProperty(key);
	}
	
	public void setProperty(String key, String value) {
		load();
		pro.setProperty(key, value);
		save();
	}
	
	public void load() {
		try {
			pro.load(fis);
		} catch (IOException e) {
			//GameConsole.sendMessage("[AccessNow] IOException round on Loading the conf.properties! Delete The AccessNow Folder!");
			e.printStackTrace();
		}
	}

	public void save() {
		try {
			pro.store(fos, "The Configurtion of AccessNow!");
		} catch (IOException e) {
			GameConsole.sendMessage("[AccessNow] IOException round on Loading the conf.properties! Delete The AccessNow Folder!");
		}
	}
	
	
}
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
einfach hier mal versuchsweise keine exception werfen sondern fangen ;)

Java:
	public void init() throws IOException {
		pro = new Properties();
		if(!accessnowfolder.exists()) {
			accessnowfolder.mkdir();
			fos = new FileOutputStream(file);
			fis = new FileInputStream(file);
			if(!(check())) {
				setFirstValues();
			}
		}
	}

ist die Ausgabe dann immernoch identisch ?

selbst wenn die properties datei leer ist , ein objekt sollte ja existieren , ansonsten fliegt die NPE ggf. da wo du ein aus der Properties datei gelesenen wert setzen möchtest .
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
ersetz mal deinen code und schau mal ob nun was anderes in der ausgabe steht

Java:
public void init(){
		try {
			pro = new Properties();
			if(!accessnowfolder.exists()) {
				accessnowfolder.mkdir();
				fos = new FileOutputStream(file);
				fis = new FileInputStream(file);
				if(!(check())) {
					setFirstValues();
				}
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
 

xJan45x

Aktives Mitglied
Ich habe es mal ersetzt es kommt immer noch eine Expection. Wenn ich vor dem config.load() noch config.init() schreibe dann kommt folgener Fehler:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at java.util.Properties$LineReader.readLine(Properties.java:434)
	at java.util.Properties.load0(Properties.java:353)
	at java.util.Properties.load(Properties.java:341)
	at de.jan.accessnow.utils.Configurtion.load(Configurtion.java:74)
	at de.jan.accessnow.gamesettings.GeneralOptions.actionPerformed(GeneralOptions.java:77)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Wenn ich config.init() weg mache und nur config.load() stehen lassen kommt dieser Fehler:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at de.jan.accessnow.utils.Configurtion.load(Configurtion.java:74)
	at de.jan.accessnow.gamesettings.GeneralOptions.actionPerformed(GeneralOptions.java:77)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
 

kaoZ

Top Contributor
at java.util.Properties$LineReader.readLine(Properties.java:434)

das sieht schon besser aus

sprich hier kann eine Zeile deiner properties datei nicht eingelesen werden

poste mal die properties datei und die Klasse LineReader
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
inLimit = (inStream==null)?reader.read(inCharBuf)

Das steht in der Zeile. Benutze das JDK deswegen kann ich in die Klasse gucken.
 

xJan45x

Aktives Mitglied
Meine Propertiets sieht so aus:

#The Configurtion of AccessNow!
#Sat Aug 23 23:42:15 CEST 2014
inited=true
console=false
LauncherOptions={'None'}
useProxy=Automatic
64bit-Modus=false
isSync=true

Und so sieht die LineReader Klasse aus die gehört aber zur Properties.class
Java:
/* Read in a "logical line" from an InputStream/Reader, skip all comment
     * and blank lines and filter out those leading whitespace characters
     * (\u0020, \u0009 and \u000c) from the beginning of a "natural line".
     * Method returns the char length of the "logical line" and stores
     * the line in "lineBuf".
     */
    class LineReader {
        public LineReader(InputStream inStream) {
            this.inStream = inStream;
            inByteBuf = new byte[8192];
        }

        public LineReader(Reader reader) {
            this.reader = reader;
            inCharBuf = new char[8192];
        }

        byte[] inByteBuf;
        char[] inCharBuf;
        char[] lineBuf = new char[1024];
        int inLimit = 0;
        int inOff = 0;
        InputStream inStream;
        Reader reader;

        int readLine() throws IOException {
            int len = 0;
            char c = 0;

            boolean skipWhiteSpace = true;
            boolean isCommentLine = false;
            boolean isNewLine = true;
            boolean appendedLineBegin = false;
            boolean precedingBackslash = false;
            boolean skipLF = false;

            while (true) {
                if (inOff >= inLimit) {
                    inLimit = (inStream==null)?reader.read(inCharBuf)
                                              :inStream.read(inByteBuf);
                    inOff = 0;
                    if (inLimit <= 0) {
                        if (len == 0 || isCommentLine) {
                            return -1;
                        }
                        return len;
                    }
                }
                if (inStream != null) {
                    //The line below is equivalent to calling a
                    //ISO8859-1 decoder.
                    c = (char) (0xff & inByteBuf[inOff++]);
                } else {
                    c = inCharBuf[inOff++];
                }
                if (skipLF) {
                    skipLF = false;
                    if (c == '\n') {
                        continue;
                    }
                }
                if (skipWhiteSpace) {
                    if (c == ' ' || c == '\t' || c == '\f') {
                        continue;
                    }
                    if (!appendedLineBegin && (c == '\r' || c == '\n')) {
                        continue;
                    }
                    skipWhiteSpace = false;
                    appendedLineBegin = false;
                }
                if (isNewLine) {
                    isNewLine = false;
                    if (c == '#' || c == '!') {
                        isCommentLine = true;
                        continue;
                    }
                }

                if (c != '\n' && c != '\r') {
                    lineBuf[len++] = c;
                    if (len == lineBuf.length) {
                        int newLength = lineBuf.length * 2;
                        if (newLength < 0) {
                            newLength = Integer.MAX_VALUE;
                        }
                        char[] buf = new char[newLength];
                        System.arraycopy(lineBuf, 0, buf, 0, lineBuf.length);
                        lineBuf = buf;
                    }
                    //flip the preceding backslash flag
                    if (c == '\\') {
                        precedingBackslash = !precedingBackslash;
                    } else {
                        precedingBackslash = false;
                    }
                }
                else {
                    // reached EOL
                    if (isCommentLine || len == 0) {
                        isCommentLine = false;
                        isNewLine = true;
                        skipWhiteSpace = true;
                        len = 0;
                        continue;
                    }
                    if (inOff >= inLimit) {
                        inLimit = (inStream==null)
                                  ?reader.read(inCharBuf)
                                  :inStream.read(inByteBuf);
                        inOff = 0;
                        if (inLimit <= 0) {
                            return len;
                        }
                    }
                    if (precedingBackslash) {
                        len -= 1;
                        //skip the leading whitespace characters in following line
                        skipWhiteSpace = true;
                        appendedLineBegin = true;
                        precedingBackslash = false;
                        if (c == '\r') {
                            skipLF = true;
                        }
                    } else {
                        return len;
                    }
                }
            }
        }
    }
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Java:
inLimit = (inStream==null)?reader.read(inCharBuf) : inStream.read(inByteBuf);

tenärer operator...

Java:
if(stream == null){
    inLimit = reader.read(inCharBuf);
}
else{
    inStream.read(inByteBuf);
}

da hilft nur debuggen , ggf. mal direkt per sysout ausgeben lassen was genau pro zeile eingelesen wird, ggf kommt hier irgendwo ein falscher wert an

am besten lässt du mal auf der konsole jede zeile der properties datei ausgeben die eingelesen wird.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
irgendwas scheint da aber nicht zu passen beim einlesen deiner Properties datei, zumindest augenscheinlich, und ja natürlich ist mir das klar^^ aber irgendwo fliegt in dem bereich eben eine NPE, ggf. wird halt die Properties datei nicht vollständig initialisiert.

viel mehr infos kann man eben nicht erkennen

aber was hindert dich daran einfach mal die daten des Properties objekte auf der konsole ausgeben zu lassen ?

ansonsten einfach mal den Wert der erwartet wird manuell setzen, und schauen ob es dann funktioniert
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Java:
public static void main(String[] args) throws FileNotFoundException, IOException{
		
		Properties prop = new Properties();
		
		prop.load(new FileInputStream(new File("H:/Apps/Test.prop")));
		
		for (Entry<Object, Object> e : prop.entrySet()) {
			System.out.println(e);
		}
	}

ggf. mal so den Wert einlesen und manuell setzen, schauen ob das dann funktioniert

Am besten du nutzt auch parralell mal deinen LineReader damit du sehen kannst was genau der da einliest, vielleicht gibts da ja auch probleme


BTW mit welchem JDK arbeitest du denn ? ich kann hier keinen LineReader finden bzw. Instanziieren
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
Jetzt kommt ein neuer Fehler und zwar habe ich mir mal die Datei ausgeben lassen in der console mit dieser Methode:
Java:
	public void test() {
		load();
		for (Entry<Object, Object> e : pro.entrySet()) {
			System.out.println(e);
		}
	}
folgerner Fehler:
Java:
Exception in thread "main" java.lang.NullPointerException
	at java.util.Properties$LineReader.readLine(Properties.java:434)
	at java.util.Properties.load0(Properties.java:353)
	at java.util.Properties.load(Properties.java:341)
	at de.jan.accessnow.utils.Configurtion.load(Configurtion.java:76)
	at de.jan.accessnow.utils.Configurtion.test(Configurtion.java:84)
	at de.jan.accessnow.AccessNow.main(AccessNow.java:30)
 

kaoZ

Top Contributor
Der LineReader gehört zum Properties Objekt selbst, ist quasi ein Attribut, ich tippe stark darauf das du hier ein Problem mit der Properties date an sich hat

LineReader ist eine innere Klasse zum auslesen der Properties Datei

die load methode gehört ebenfalls zum Properties objekt

ja gibt es

Preferences
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
Ich weis. Hätte ich vllt. sagen sollten.
Wenn ich die Größe der Properties datei ausgebe kommt immer "0" zurück.
Ob wohl daten drin steht
 

kaoZ

Top Contributor
also, getProperty("isSync"); liefert einen String lieteral mit "true", parst du auf einen boolschen Wert ?

du musst folgendes mal versuchen wenn du deinen Wert setzen willst

Java:
		boolean val = Boolean.parseBoolean(prop.getProperty("isSync"));
		System.out.println(val);

Wenn ich mir eine Property ausgebe zb(System.out.println(pro.getProperty("isSync")); kommt in der console "isSyncnull" zurück

Dann wird dein Properties Objekt nicht richtig gelesen!
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
Ich muss ja ein String als Value übergeben driekter Boolean Wert geht nicht also habe ich das im String gemacht das Abfragen ist ja kein Problem nur warum mir "null" zurück geliefert ob wohl der Wert eingetragen ist auch mit anderen Werten geht das nicht
 

kaoZ

Top Contributor
wo liegt deine Properties datei ? in einem Resource ordner ? wie ist der pfad, und wie gibst du den Pfad an ?
 

xJan45x

Aktives Mitglied
Nein sie liegt nicht im src Ordner.
Ich prüfe erst ob es denn Ordner "AccessNow" im Verzeichnis "Roaming" vorhanden ist falls nicht dann erstelle ich ihn dann prüfe ich ob der Value "inited" == null ist wenn ja dann setzte ich alle Values mit setProperty(key, value); und beim nesten start ist ja der Key "inited" nicht mehr null und von darher muss ich ja auch nicht die Werte setzten

Und das sind meine Pathe die ich nutze "file" ist die endgültige File "conf.properties"
public Properties pro = null;
private String currentUser = System.getProperty("user.home");
private File roaming = new File(currentUser + "/AppData/Roaming");
private File accessnowfolder = new File(roaming + "/AccessNow");
private File file = new File(accessnowfolder, "conf.properties");
private OutputStream fos = null;
private FileInputStream fis = null;
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
So ein riesen aufwand ^^ nur für so ein paar werte......

anscheinend werden die Properties zwar geschrieben, aber beim auslesen haut rigendwas nicht hin ......

aber,

an deiner stelle würde ich dafür Preferences verwenden,

dazu sind diese ja gedacht , um voreinstellungen einer anwendung in der Registry zu hinterlegen und bei bedarf zu ändern und abzurufen, auf die schnelle und ohne das ich den code selbst debuggen kann, die pfade kontrollieren kann kann ich dir nur noch raten die pfade mal von hand zu setzen an den betroffenen stellen oder direkt auf preferences zu wechseln
ich habe dazu grade erst selbst einen Beitrag erstellt gehabt da ging es auch um properties vs. preferences,
ich finde Preferences eindeutig die schickere und einfachere wahl !

die endgültige lösung ist hier im letzen abschnitt :


Preferences
 
Zuletzt bearbeitet:

xJan45x

Aktives Mitglied
Ich werde mir das morgen noch mal ganz genau anschauen und vllt. mir was anders suchen zum speichern etc...
Aber danke das du mir so viel geholfen hast :)

EDIT:
Ich werde dieses storeToXML und loadFromXML morgen mal ausprobieren
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Wie gesagt , da es sich ja um Voreinstellugen deiner eigentlichen Anwendung handelt, würde ich eben auch ein dementsprechende objekt verwenden (Preferences) wenn es dann um einstellungen an den jeweiligen Komponenten selbst geht da würde ich dann zu properties übergehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S ActionEvent Press Enter per Code auslösen AWT, Swing, JavaFX & SWT 22
B JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse AWT, Swing, JavaFX & SWT 2
M JavaFX ActionEvent Button AWT, Swing, JavaFX & SWT 6
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
S JavaFX Unterschied MouseEvent und ActionEvent AWT, Swing, JavaFX & SWT 3
KilledByCheese Event Handling Vom ActionEvent auf String zugreifen - genaueres in der Beschreibung AWT, Swing, JavaFX & SWT 3
G Swing Durch GlassPane auf Button klicken und ActionEvent auslösen AWT, Swing, JavaFX & SWT 0
K Ereignisbehandlung, ActionListener, ActionEvent AWT, Swing, JavaFX & SWT 3
T Fehler bei ActionEvent? AWT, Swing, JavaFX & SWT 3
P ActionEvent wird nicht verarbeitet AWT, Swing, JavaFX & SWT 4
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
J JavaFX ActionEvent AWT, Swing, JavaFX & SWT 8
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
M Swing ActionEvent soll von Anderem ActionEvent abhängen AWT, Swing, JavaFX & SWT 3
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
1 ActionEvent generieren und an ActionListener weiterleiten AWT, Swing, JavaFX & SWT 12
L JFrame größe in einem ActionEvent ändern AWT, Swing, JavaFX & SWT 4
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
M Arbeiten mit actionPerformed(ActionEvent) oder Alternative AWT, Swing, JavaFX & SWT 7
N Aufgabe: ActionEvent - Abfrage AWT, Swing, JavaFX & SWT 7
N Problem mit ActionEvent - Abfrage AWT, Swing, JavaFX & SWT 10
Dit_ Objekt mit ActionEvent übergeben AWT, Swing, JavaFX & SWT 2
B JFreeChart Balkendiagramm ActionEvent AWT, Swing, JavaFX & SWT 2
kirchrath Swing Aus ActionEvent Objekt herausfinden auf dem er ausgeführt wurde AWT, Swing, JavaFX & SWT 4
T JTable durch ActionEvent befüllen AWT, Swing, JavaFX & SWT 3
B ActionEvent Dateipfad als String übergeben AWT, Swing, JavaFX & SWT 11
M Frage zu ActionEvent? AWT, Swing, JavaFX & SWT 4
P KeyEvent methode an actionEvent methode weiterleiten AWT, Swing, JavaFX & SWT 5
M Eigenes ActionEvent / Eigener Listener AWT, Swing, JavaFX & SWT 2
G ActionEvent richtig anbringen AWT, Swing, JavaFX & SWT 7
C JButton-Name per ActionEvent rausfinden AWT, Swing, JavaFX & SWT 2
P actionlistener und actionevent AWT, Swing, JavaFX & SWT 2
M ActionEvent löst nicht aus AWT, Swing, JavaFX & SWT 4
T actionevent an modalen dialog AWT, Swing, JavaFX & SWT 5
L eigene Komponente, ActionEvent senden? AWT, Swing, JavaFX & SWT 3
M ActionEvent manuell senden AWT, Swing, JavaFX & SWT 7
S Neubaufbau eines Tabelleninhalts bei actionEvent AWT, Swing, JavaFX & SWT 4
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
W JavaFX CSS ändern wirft NPE AWT, Swing, JavaFX & SWT 8
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
F JavaFX wirft zufällig Exceptions AWT, Swing, JavaFX & SWT 5
zhermann JavaFX DialogPane.showAndWait wirft Cast Error AWT, Swing, JavaFX & SWT 1
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
A Swing Zahlenraten GUI wirft nur die Error Message aus AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben