# IO Exception



## Tonxxx (22. Jul 2009)

hei zusammen

ich lerne in der Schule gerade Java. weil es mich jedoch sehr interressiert und ich ferien habe, probiere ich es mir selbst anzueignen. 
ich habe hier ein Programm geschrieben, welches ein RateSpiel darstellen soll.
Jedoch habe ich jetzt probleme mit der Highscore, genauer gesagt mit dem IOException!



```
// RateSpiel

import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.util.*;

	public class RateSpiel extends Applet
	{

		Label		l_eingabe;
		TextField	t_eingabe;
		Button		b_abschicken;
		TextArea	t_ausgabe, t_h_ausgabe;


		String titel;
		String tmp;
		String tmp_1;
		int zahl_alt;
		int zahl;
		int i = 0;
		int zufallszahl;



		class Lauscher implements ActionListener
		{

			
			public void actionPerformed(ActionEvent e)
			{




				if(i == 0)
				{
					//Zufallszahl
					Random zufall = new Random();
				
					zufallszahl = zufall.nextInt(1000);
					
				}
				
				Highscore hs = new Highscore();

				hs.einlesen();//Fehler
				hs.ausgabe(zahl_alt);



				titel = e.getActionCommand();

				if (titel.equals("neuer Versuch!"))
				{


					i++;

					tmp = t_eingabe.getText();
					zahl = Integer.valueOf(tmp).intValue();


					t_ausgabe.setText("");

					t_ausgabe.append(String.valueOf(""));


					if(zufallszahl > zahl)
					{
						t_ausgabe.append("\n\n\nSie sind zu tief!");
					}

					else if (zufallszahl < zahl)
					{
						t_ausgabe.append("\n\n\nSie sind zu hoch!");
					}
					else
					{
						t_ausgabe.append("\n\nSie haben die Zahl erraten!");

						t_ausgabe.append("\n\n\nSie haben es beim " + i + 
									". mal geschaft! Gratuliere");

						if(i < zahl_alt)
						{
							hs.ändern(i);//Fehler
						}
					}				


				}
			
			
			}


		}

		class Highscore
		{
		
			int einlesen() throws IOException
			{
				
				FileReader dateiStream =
					new FileReader("Highscore.txt");

				BufferedReader eingabeDatei =
					new BufferedReader (dateiStream);

				tmp_1 = eingabeDatei.readLine();
				zahl_alt= Integer.parseInt(tmp_1);


				return zahl_alt;

			}

			void ausgabe(int zahl_alt)
			{
				
				t_h_ausgabe.append("\n\nDer 1. Platz liegt bei " + zahl_alt + " Versuchen!");

			}

			void ändern(int i) throws IOException
			{
				
				FileWriter dateiStream2 =
					new FileWriter("Highscore.txt");

				PrintWriter ausgabe = 
					new PrintWriter(dateiStream2);

					ausgabe.println(i);				
				

			}

		}


		public void init()
		{

			l_eingabe = new Label(" Bitte Zahl eingaben :");
			t_eingabe = new TextField(5);

			b_abschicken = new Button("neuer Versuch!");

			t_ausgabe = new TextArea(10, 40);
			
			t_h_ausgabe = new TextArea(5,40);

			setLayout(new FlowLayout(FlowLayout.LEFT));

			add(l_eingabe);
			add(t_eingabe);
			add(b_abschicken);
			add(t_ausgabe);
			add(t_h_ausgabe);

			b_abschicken.addActionListener(new Lauscher());
		}



	}
```

Erlich gesagt weiss ich gar nicht, wann ich dieses IOException schreiben soll, und wann nicht.

Die Fehlermeldung war jedenfalls:
unreported exception java.io.IOException; must be caught or declared to be thrown

vielen dank für eure Hilfe


----------



## bygones (22. Jul 2009)

wenn in Java eine Exception geworfen wird, muss die irgendwer auffangen...
das macht man entweder ueber delegieren (throws xxException) - wie du es bei der Methode [c]einlesen[/c] getan hast
oder man faengt sie direkt ueber try / catch

d.h. was du aendern musst

```
try {
   hs.einlesen();//Fehler
}
catch(IOException e) {
   System.out.println("Fehler aufgetreten")
   e.printStackTrace(); // z.b. gibt dir aus wo und was der fehler ist
}
```


----------



## Civilazi (22. Jul 2009)

Die Fehlermeldung sagt doch alles, was du wissen musst. Eine IOException kann bei Input/Outputsachen auftreten (daher der Name). D. h. du machst das Schreiben / Lesen in einen try-catch-Block (einfach mal googlen) --> 
try{einlesen}catch IOException{System.out.println("Ein Fehler, oh nein oh nein!");}
oder so, wie du es machst, du schreibst an die Methode, in der Eingelesen / geschrieben wird, ein throws IOException mit ran. Das heißt, wenn innerhalb der Methode der Fehler auftritt, bricht die Methode ab und wirft den Fehler weiter. Dann hast du den Fehler innerhalb der Methode, die die erste Methode aufgerufen hat. --> wieder try-catch oder throws. Bei throws --> wieder in der höheren aufrufenden Methode der Fehler. 

Also reichst du das entweder dauernd durch oder kümmerst dich um eine vernünftige Fehlerbehandlung. 

Na ja außerdem würde ich an deiner Stelle Umlaute im Code vermeiden und den Variablen sprechende Namen geben. Solange du alleine programmierst und damit klarkommst --> wie du willst.


----------



## Tonxxx (22. Jul 2009)

Klappt irgendwie nicht.
jetzt erwartet er ein ";".


----------



## SlaterB (22. Jul 2009)

wenn jemand

 System.out.println("a");
 System.out.println("b");
 System.out.println("c")
 System.out.println("d");

posten würde, könntest du dann selber das fehlende Semikolon finden und ergänzen?


----------



## Tonxxx (22. Jul 2009)

sorry, peinlich.
trotzdem danke


----------

