Input/Exception Problem

vaporizer

Erfahrenes Mitglied
Hallo
Habe folgendes Problem:
Ich möchte ein Konsolen-Adressbuch schreiben und erstelle um eingaben zu lesen eine Input Klasse.
Code:
import java.io.*;

public class Input
{
	private static BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
	
	public Input()
	{
	}
	public static String readString()
	throws IOException
	{
		return read.readLine();
	}
}
nun möchte ich aus einer anderen Klasse die readString Methode verwenden um einen String einzulesen.
Code:
public class Interface
{
	public Adressbuch adrb;
	
	public Interface()
	{
		adrb = new Adressbuch();
	}
	public void printMenu()
	{
		Input in=new Input();
		String eins;
		int eini;
		System.out.println("Bitte Waehlen:");
		System.out.println("1. Person hinzufuegen");
		System.out.println("2. Adressbuch anzeigen");
		System.out.println("3. Personen sortieren");
		System.out.println("4. Programm beenden");
		System.out.print("Eingabe: ");
		eins = Input.readString();
		eini = Integer.parseInt(eins);
		if(eini==1)
		{
			adrb.addPerson();
		}
	}
}
Input.readString(); ist ein unheadled Exception type
da ich mit Exception noch nicht all zu viel am hut habe, hab ich keine Ahnung was ich machen soll.
kann mir jemand helfen?
 
Zuletzt bearbeitet:
Hallo!

Deine Input Klasse wirft nach der Methoden Deklaration von readString eine IOException. Entweder deklarierst du die Methode printMenu auch mittls throws IOException (was dann schön bis zur Main Methode weiter kaskadiert) oder du legst die Anweisung in einen try{ ... }catch(IOException e){e.printStackTrace();} Block.

Code:
	public static String readString()
	{
                             try{
		return read.readLine();
                             }catch(IOException ioe){
                                          ioe.printStackTrace();
                             }
	}

Gruß Tom
 
also ich hab mich für Toms Vorschlag entschieden, ;-)
Wie meintest du das Jeffrey?
Mit den Instanzen, wenn ich nun die readString Methode ein zweites mal aufrufe,
gibt es da dann Probleme?
 
Hallo!

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/* Das Singleton Pattern ist so aufgebaut,
 * das man normalerweise eine statische Klassenvariable hat
 * in der die Instanz referenziert wird. Zusätzlich gibt es
 * noch einen privaten Konstruktor der nicht von außen aufgerufen werden
 * kann. Um nun eine Instanz dieser Singleton Klasse zu erhalten bemüht man
 * eine statische Methode (hier: getInstance) die prüft ob die 
 * interne Referenz nicht null ist. Ist sie null wird der Konstruktor der
 * Klasse aufgerufen (das darf man ja von dort aus) und die zurückgegebene
 * Referenz wird in der Klassenvariable (instance) gespeichert.
 * Anschließend wird eine public Membermethode aufgerufen welche das
 * gewünschte Reader Objekt erzeugt welches im Konstruktor von ConsoleReader
 * erzeugt wurde.
 * 
 * Das Singleton Pattern hat die Eigenschaft dafür zu sorgen, dass von einer 
 * Klasse immer nur eine Instanz existiert, was jedoch nur für die VM bzw. sogar
 * nur für den aktuellen ClassLoader gilt.
 * 
 */

public class ConsoleReader {
	
	private static ConsoleReader instance;
	private BufferedReader reader;

	private ConsoleReader() {
		reader = new BufferedReader(new InputStreamReader(System.in));
	}

	public static ConsoleReader getInstance() {
		if (instance == null)
			instance = new ConsoleReader();
		return instance;
	}

	public String readLine() {
		try {
			return reader.readLine();
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}
}

Gruß Tom
 
hmmm so weit so gut,
aber nehmen wir mal an ich würde die Input Klasse, bzw das enthaltene nicht static machen,
sondern normale attribute, und eine normale(nicht static) readString Methode,
und würde dann aus einer anderen Klasse ein Objekt der klasse input erzeugen,
und mit diesem Objekt immer wieder die readString Methode aufrufen,
dann könnt ich mir diese Abfrage ersparen,
da ich ja selber die Objekte erzeuge die ich brauche
und somit nicht mehr erzeugt wird als was ich angebe.
Oder?
 
Zurück