exception "java.io.IOException: Stream closed"

henpara

Bekanntes Mitglied
Ich bekomme diese exception in folgendem try-block:

Java:
	public void writeToLogFile(String info, boolean crt) {
		try { 
			buffWriter.write(info);
			if (crt) 
				buffWriter.newLine();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
und zwar genau in der buffWriter.write(info)- zeile.

Nun sollte ich noch erwähnen, daß die writer
Java:
	static Writer writer;
	static BufferedWriter buffWriter;
so aussehen und daß am Anfang des Programms
Java:
	public void openLogFile() {
		try { 
			// von true auf false setzen, wenn man NICHT möchte, daß out.log überschrieben wird.
			writer = new FileWriter(logFile, true);
			buffWriter = new BufferedWriter(writer);
		}   
		catch (Exception e) { e.printStackTrace();
		}
aufgerufen wird, und erst GANZ am Ende
Java:
	public void closeLogFile() { 
		try { 
			buffWriter.flush();
			buffWriter.close();
			writer.close();
		}   
		catch (Exception e) {
			e.printStackTrace();
		}

Nun meine Frage:
wie kann es zu dieser Exception kommen. Wann wird ein Stream ohne .close() geclosed? oder MUSS hier ein Programmierfehler vorliegen, das heißt daß der Stream implizit geclosed wird?!

Über jede Art von Hilfe zur Fehlerbehebung bin ich dankbar!

mfG
 

Cru

Aktives Mitglied
Also anhand deiner Schnipsel seh ich da nichts...

Die Exception kommt aber, dass hast du richtig erfasst, wenn der Stream zu früh geschlossen wird (z.B. das .close() ist falsch positioniert).

Eine Idee wäre:
Java:
if(buffWriter!=null) {
    buffWriter.close();
}

if(writer!=null) { 
    writer.close();
}

Vielleicht mal posten wie du deine Methoden aufrufst?
 
S

SlaterB

Gast
ist der Fehler reproduzierbar oder tritt er zufällig auf? im letzten Fall zumindest so oft dass man sich direkt damit beschäftigen kann?

allgemeine Möglichkeiten zur Fehlerfindung:
- überall im Programm nach close() suchen, ok zu einfach
- statt FileWriter + BufferedWriter eigene Klassen verwenden bzw. BufferedWriter erstmal rauslassen und nur statt FileWriter eine überschriebene Klasse und dort close() überschreiben und loggen ob es aufgerufen wird
- generell alle writeToLogFile()-Aufrufe loggen, wann ging es noch, wann nicht mehr, zufällig Begin/Ende einer bestimmten Aktion des Programms?
- weiter zur Eingrenzung des Zeitraums: einen Thread im Programm nebenher laufen lassen, der alle 100ms bzw. noch öfter etwas schreibt ;)
wann geht der nicht mehr?
 

henpara

Bekanntes Mitglied
ja, er ist reproduzierbar.

bin jetzt ein stück weiter. Und zwar:

in einem methodenaufruf wurde die closelogfile methode aufgerufen, das war aber nicht immer auch gleichzeitig das programmende.
wenn man jetzt eine andere methorde aufgerufen hatte , kam die exception.
was mich allerdings noch verwundert ist, daß in der anderen methode nochmal explizit openlogfile aufgerufen wurde.

trotzdem wurde der stream als closed gesetzt.

ich hab es jetzt so gemacht, daß der log-stream erst vor dem System.exit ausgeführt wird.
hoffentlich klappt das.
 

henpara

Bekanntes Mitglied
hmm hab den Fehler gerade etwas verschoben, dürfte aber einfacher zu erklären sein:

nach wie vor gibt es die Instanz der Klasse Log, dort wurden auch mit OpenLogFile() die writer geöffnet, bzw. instanzen erstellt
Java:
	public void openLogFile() {
		try { 
			writer = new FileWriter(logFile, true);
			buffWriter = new BufferedWriter(writer);
		}   
		catch (Exception e) { 
			e.printStackTrace();
		}

so, nun hab ich das CloseLogFile(); je vor das System.exit(0) gepackt, also zB bei Exit über Fenster-schließen:
Java:
this.setDefaultCloseOperation(this.close());
mit
Java:
	protected int close() {
		go.Go.log.closeLogFile();
		return WindowConstants.EXIT_ON_CLOSE;
	}
jetzt hat das Frame aber einen Dialog, der über folgenden Konstruktor gebaut wird:
Java:
	public Login(Frame XTFrame) {
		super(XTFrame);
		this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
	}
wenn ich jetzt im Anmeldedialog meine Daten eingebe und auf den "login"-Button drücke bekomme ich oben genannte exception.

Button-Ausführung:
Java:
static ActionListener al0 = new ActionListener() { 
		  @Override public void actionPerformed( ActionEvent e ) { 
			User = Username.getText();
			Pwd = String.valueOf(Password.getPassword());
			//go.Go.log.print(User + " " + Pwd + " " + URL);
			//System.out.println("MUAHAH");
			if (checklogin(URL, User, Pwd)) {
				mainFrame.dispose();
				go.Go.log.println(URL + " " + User);
				try {
					gui.MTxFrame.theReportEngine.open();
				} catch (Exception e2) {
					System.exit(0);
					e2.printStackTrace();
				}
				try {
					mtx10.Ini.conn.close();
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			} else {
				Username.setText("");
				Password.setText("");
				JOptionPane.showMessageDialog(mainFrame, "Username or password is incorrect.");
			}
			
		  }
	};
man beachte, daß die exception genau beim mainFrame.dispose(); bzw. eben dahinter auftritt, mainFrame extends JDialog.
 
S

SlaterB

Gast
besteht eine Frage?

falls bei
> mainFrame.dispose();
> go.Go.log.println(URL + " " + User);
die Exception auftritt ist dazu nach wie vor wenig zu sagen, deine Codes und Erklärungen lassen nicht erkennen, ob und wo an dieser Stelle das (eine oder mehrere?) Log schon geöffnet oder bereits wieder geschlossen wurde,

wenn du schon erkannt hast, dass alles über deine normalen Methoden läuft, dann wird es ja einfach sein, nachzuvollziehen, wann was wo warum passiert,
um die Exception zu vermeiden kannst du auch eine Abfrage if (stream.isClosed()) verwenden
 

henpara

Bekanntes Mitglied
ok, ich versuch mich nochmal kurz und besser verständlich auszudrücken:

in der Main methode ganz am anfang wird EINMAL eine Instanz der Klasse Log erstellt. Daraufhin noch die methode openLogFile aufgerufen, damit der BufferedWriter instanziiert ist (richtige formulierung?).

das ist das EINZIGE mal, wo eine Instanz der Klasse Log aufgerufen bzw. instanziiert wird.
Jetzt wird nun entweder, wenn man über "optionen" (MenüEintrag im Frame) "Quit" wählt die methode closeLogFile aufgerufen, oder aber über die "setDefaultCloseOperation" des Frames.

Das sind definitiv die beiden EINZIGEN Möglichkeiten die closeLogFile methode aufzurufen, wo der BufferedWriter geschlossen wird.

Offensichtlich wird der Stream aber auch geschlossen, wenn ein JDialog, der das Frame als Parent hat disposed wird, der Stream ebenso geschlossen.

Und das ist genau die Stelle, die ich nicht verstehe.
Was hat "dialog.dispose()" mit setDefaultCloseOperation des Parent-Frames zu tun?


Hoffe ich war diesmal etwas verständlicher ;)

(Der Fehler verschwindet, wenn ich die DefaultCloseOperation des Frames (nicht des Dialogs) auf "DO_NOTHING_ON_CLOSE" änder)

mfG und trotzdem Danke schonmal für die Anregungen!
 
S

SlaterB

Gast
nun gut, da war dann doch schon mehr vorher zu sehen, zunächst:

> mainFrame.dispose();
> go.Go.log.println(URL + " " + User);

hast du getestet, ob VOR dem dispose-Aufruf das Log noch geht? meiner Meinung nach hat diese Code-Zeile nichts mit dem Problem zu tun,

------

> Der Fehler verschwindet, wenn ich die DefaultCloseOperation des Frames (nicht des Dialogs) auf "DO_NOTHING_ON_CLOSE" ändere

das durchaus denn diese Einstellung ist für sich das Problem unabhängig ob später das Frame geschlossen wird oder nicht

> this.setDefaultCloseOperation(this.close());
bedeutet nämlich nicht 'merke dir diese Methode und führe sie beim close aus', das geht in Java so noch gar nicht,
tatsächlich bedeutet es:
Java:
int x = this.close(); // Log hier am Anfang schon geschlossen!
this.setDefaultCloseOperation(x); // Parameter ist ein int, vorkonfigurierte mögliche Einstellungen, 

z.B. 
public static final int EXIT_ON_CLOSE = 3;

was du brauchst ist
Java Tips - How to use WindowListener for closing JFrames
 

henpara

Bekanntes Mitglied
hast du getestet, ob VOR dem dispose-Aufruf das Log noch geht? meiner Meinung nach hat diese Code-Zeile nichts mit dem Problem zu tun,
hab ich.

zu dem close() als setdefaultcloseoperation: danke für den hinweis, hatte schon so etwas befürchtet :/
aber trotzdem schließt er den stream anscheinend ja...
und das würde genau das erklären, weil er ja das "int" zuweist, wie du schreibst. dort führt er dann die methode aus und die schließt den stream schon lange bevor irgendwann man das fenter-schließen geklickt wird!

thx!
 
S

SlaterB

Gast
> hab ich.
und? dürfte doch auch nicht funktioniert haben, ergo dispose() egal


> aber trotzdem schließt er den stream anscheinend ja...

was heißt 'aber trotzdem', ist doch alles klar nun oder? siehe noch den Link am Ende des letzen Postings, sekunden später editiert
 

henpara

Bekanntes Mitglied
> hab ich.
und? dürfte doch auch nicht funktioniert haben, ergo dispose() egal
doch es hat funktioniert, das ist auch das einzige, was mich zZ noch stutzig macht.

und: dein link hat mir sehr geholfen! thx!


Hab es jetzt entsprechend deinem Link geändert und es läuft alles. keine Stream closed exceptions mehr ;)

wobei ich das mit dem stream und wann er ggf closed noch nicht ganz durchschaut habe. bzw. wann ist klar, aber wie es dazu kam, daß´genau dort die close-methode aufgerufen wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Fehlermeldung unreported exception java.io.IOException. Java Basics - Anfänger-Themen 2
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
F Java exception bei der Ausführung Java Basics - Anfänger-Themen 10
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S java exception auffangen Java Basics - Anfänger-Themen 4
F Exception in thread main java.lang.StackOverflowError Java Basics - Anfänger-Themen 3
A Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 7
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
M Exception in thread "main" java.lang.NoClassDefFoundError: MeineKlasse Java Basics - Anfänger-Themen 12
B Erste Schritte "Java exception" - was zum... Java Basics - Anfänger-Themen 5
R Erste Schritte Exception bei erstellen von Java Sound Java Basics - Anfänger-Themen 23
1 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException Java Basics - Anfänger-Themen 5
S Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 11
S Umgebungsvariable Exception in thread "main" java.lang.UnsatisfiedLinkError: no J3D in java.librar y.path Java Basics - Anfänger-Themen 15
M Klassen Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 2
C Java Nullpointer Exception in 2D-Spiel Snake Java Basics - Anfänger-Themen 8
D java.util.ResourceBundle - exception Java Basics - Anfänger-Themen 4
A Compiler-Fehler unreported exception java.lang.Exception; must be caught or declared to be thrown Java Basics - Anfänger-Themen 7
B Exception in thread "main" java.lang.NullPointerException Fehler Hilfe! Java Basics - Anfänger-Themen 4
Spin Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: data must Java Basics - Anfänger-Themen 10
A Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 16
B Fehlermeldung - Exception in thread "main" java.lang.Error: Unresolved compilation pr Java Basics - Anfänger-Themen 16
E Fehler: "Exception in thread "main" java.lang.NoSuchMethodError" Java Basics - Anfänger-Themen 15
D java.util.Currency.getInstance exception mit brit. Pfund Java Basics - Anfänger-Themen 4
L Filenotfound Exception bei java.io obwohl file existiert Java Basics - Anfänger-Themen 10
G Fehler: Exception in thread main java.lang.noClassDefFound Java Basics - Anfänger-Themen 7
L Exception in thread "main" java.util.NoSuchElement Java Basics - Anfänger-Themen 4
1 Fehler: uncaught exception: internal error: Can't get Java c Java Basics - Anfänger-Themen 2
A Do/While Problem (Exception in thread "main" java. Java Basics - Anfänger-Themen 4
M "exception in thread "main" java.lang.NullPoi Java Basics - Anfänger-Themen 2
S JAVA RMI EXCEPTION Java Basics - Anfänger-Themen 6
S Exception in thread "main" java.lang.UnsupportedCl Java Basics - Anfänger-Themen 4
O java.lang.NoClassDefFoundError Exception in thread "mai Java Basics - Anfänger-Themen 5
V Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 21
S Exception in thread "main" java.lang.NoSuchMethodE Java Basics - Anfänger-Themen 3
NightmareVirus Exception in thread "main" java.lang.NoSuchMethodE Java Basics - Anfänger-Themen 8
A "Exception in thread "main" java.lang.NoCLass Java Basics - Anfänger-Themen 10
A Exception in thread "Thread-33" java.lang.NoClassD Java Basics - Anfänger-Themen 10
C Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 9
vogella Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NoSuchMethodE Java Basics - Anfänger-Themen 6
C exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 7
A Fehlermeldung: Exception in thread "main" java.lan Java Basics - Anfänger-Themen 3
Z Fehlermeldung: Exception. java.lang.String Java Basics - Anfänger-Themen 7
H Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 3
L Java App + Exception abfangen Java Basics - Anfänger-Themen 2
L Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NullPointerEx Java Basics - Anfänger-Themen 10
L Exception in thread "main" java.lang.NoSuchMethodE Java Basics - Anfänger-Themen 3
J Java.lang Null Pointer Exception Java Basics - Anfänger-Themen 3
K Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 8
J Exception in thread "main" java.langClassNoFoundEr Java Basics - Anfänger-Themen 2
H Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 5
B Fehler: Exception in Thread "main" java.lang.NoCla Java Basics - Anfänger-Themen 2
G Exception in thread "main" java.lang.NoClassDefFou Java Basics - Anfänger-Themen 2
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
G Exception Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception werfen bei falscher Datumseingabe Java Basics - Anfänger-Themen 14
A Exception handeling mit finally und objektreferenzen Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
S Exception Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben