Java File Reader in gui Programm

ali7566

Lieutenant
Registriert
Feb. 2007
Beiträge
938
Hallo leute,

ich habe ein Java Programm zu testzwecken erstellt das mit dem FileReader Textdateien einlesen soll und dies dann in einer TextArea ausgeben soll. Fehler hab ich keine aber der Text wird nicht eingelsen. Am pfad liegt es nicht.

Hier mal der Code:

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class einlsen
{
public static void main(String [] args)
{
Fenster f= new Fenster();
}
}

class Fenster extends Frame implements ActionListener
{
public Label erkl= new Label("Eingelesener wert: ");
public TextArea tr= new TextArea();
public Button lesen= new Button("Einlesen");

public Fenster()
{
super("Einlese-Programm");
this.setBackground(Color.white);
this.addWindowListener(new FensterSchließen());
this.add("North", erkl);
this.add("Center", tr);
this.add("South", lesen);

lesen.addActionListener(this);

this.pack();
this.setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource()== lesen)
{
try
{
FileReader ausleseObjekt= new FileReader("one.txt");
BufferedReader auslesen= new BufferedReader(ausleseObjekt);
String zeile= auslesen.readLine();


while(zeile != null)
{

zeile= auslesen.readLine();
tr.setText(zeile);
}


ausleseObjekt.close();

} catch (IOException e){

}finally {

}
}
}
}

class FensterSchließen extends WindowAdapter
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
}


Wäre dankbar für hilfen
 
Sollte es statt
Code:
tr.setText(zeile);
nicht heißen
Code:
tr.setText(tr.getText() + "\n" + zeile);
? Würde ich zwar anders machen, aber nur so als Denkansatz..

Edit:

Oder besser:
Code:
tr.append("\n" + zeile);

Und außerdem: Wenn dein catch-Block leer ist, dann bekommst du selbstverständlich keine Fehlermeldung ;). Ist natürlich ne doofe Idee, wenn man Fehler finden will.
 
Zuletzt bearbeitet:
Zum testen ok.

Probier mal ein repaint am textarea.

mfg
 
Das Auslesen ist wirklich fehlerhaft weil du den Text IMMER komplett neu setzt in der Schleife und beim letzten Aufruf von setText null übergeben wird. Somit ist der Text auch leer.
Idealerweise nimmt man einen StringBuilder. So in der Art:
Code:
BufferedReader auslesen = null;
try{
  auslesen= new BufferedReader(new FileReader("one.txt")); // eleganter. den FileReader braucht man als Objekt nicht
  String zeile= auslesen.readLine();
  StringBuilder sb = new StringBuilder();
  while(zeile != null){
    sb.append(zeile).append("\n");
    zeile= auslesen.readLine();
  }
  if(sb.length() > 0) sb.setLength(sb.length()-1);    // kosmetische Korrektur: das letzte \n wieder entfernen
  tr.setText(sb.toString());
} catch (Exception e){}
// closen in extra try/catch-Block damit es auf jeden Fall ausgeführt wird auch wenn ein Fehler (z.B. beim Setzen des Textfeldes) auftritt!
try{
   auslesen.close(); // der außenliegende BufferedReader schließt automatisch den FileReader. Man sollte immer den außenliegenden Reader schließen!
} catch (Exception e){}
 
Zuletzt bearbeitet:
Schon mal vielen dank an alle, ich werde das jetzt mal ausprobieren und mich dann nochmal melden.

gruß Ali
 
könnte mir jemand mal erklären wie ein ActionListener genau funktioniert. Ich weiß ja wie man ihn implementiert aber noch nicht genau wie er funktioniert.


gruß Ali
 
Ja der ActionListener hört praktisch zu ob irgendwas zum Beispiel angeklickt wird. Wenn dann auch noch einer der Komponenten geklickt wird, die dann vorher registriert wurden, dann löst es das Event ActionPerformed aus und übergibt dabei das angeklickte Objekt, was du mit arg0.getSource() (bzw. hier ae.getSource()) erreichen kannst. Dann wird halt mit deinen Bedingungen eine "Gegenüberstellung" getätigt zwischen dem was der Zeuge gesehen hat (also der ActionListener) und den einzelnen Verdächtigen. Wenn es da eine Übereinstimmung gibt, ist dann die jeweilige Bedingung wahr.
 
hey sehr gut erklärt danke
 
Zurück
Oben