Inhalt eines Strings in JLabel ausgeben?

comiplo

Mitglied
Hallo,

obwohl mir diese Funktion eigentlich ziemlich einfach erschien, schaffe ich es nicht, sie zu erstellen.

Ich habe den Inhalt einer *.txt Datei in einen String eingelesen. Jedoch schaffe ich nicht, diesen in einem JLabel auszugeben?!

Mein Code:
Java:
package rahmen3;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Fenster3
{


public static void main(String[] args)
  {
	    try
	    {
	      BufferedReader Datei = new BufferedReader (new FileReader("e:\\Dokumente\\Java\\Beispiele\\Fenster3\\src\\rahmen3\\test.txt"));
	      boolean Dateiende = false;
	      while (!Dateiende)
	      {
	        String Zeile = Datei.readLine();
	        if (Zeile == null) Dateiende = true;
	      }
	      Datei.close();
	      }
	    catch (IOException x)
	    {
	      JOptionPane.showMessageDialog (null, "Kann Daten nicht laden!");
	      System.exit (0);
	    }
	  
    JFrame Rahmen = new JFrame("Test ...");
    Rahmen.setSize (400,300);
    Rahmen.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    JPanel Platte = new JPanel ();

    
    JLabel lab = new JLabel (Zeile); // keine ahnung, ob das stimmt - offenbar aber nicht ...

	
    Platte.add (lab);

    Rahmen.setContentPane (Platte);
    Rahmen.setVisible(true);
  }
}

Und noch ein 2 Fragen:

1.
Warum bekomme ich eine Fehlermeldung, wenn ich in statt

new BufferedReader (new FileReader ("e:\\Dokumente\\Java\\Beispiele\\Fenster3\\src\\rahmen3\\test.txt"));

new BufferedReader (new FileReader("test.txt"));

schreibe? Also ohne dem ganzen C:\ ... ?

2.
Wenn ich die *.java Datei nun als Jar haben will, muss ich die Textdateien in diese Jar miteinpacken, oder geht das auch wenn sie einfach nur im selben Verzeichnis liegen?

MfG,
comiplo
 
Zu 1) weil die Datei so nicht gefunden wird
Zu 2) da funktionieren mehrerer Varianten, wenn die Datei nur gelesen werden soll, würde ich sie ins jar mit reinpacken. Ansonsten kann die Datei liegen wo sie will, solange das Programm sie findet ;-)

Zu Deinem Code:
Lässt der sich überhaupt komplilieren die Variable Zeile ist nur in der while-Schleife definiert!

Und noch ein Hinweis auf die Code Conventions: Variablen sollten mit Kleinbuchstaben beginnen.
 
1) Variablennamen klein und camelcase.
2) In der Schleife rereferenzierst du den String immer mit einer neuen Instance.
3) Zeile ist da unten garnicht sichtbar.
4) Streams/Reader/Writer sollten man am Besten in einer finally schließen.
5) Selbes Verzeichnis.
6) Weil die Datei im grundsätzlichen falschen Verzeichnis liegt.
 
Hier ein paar Anmerkungen ... Mir ist in dem angegebenen Kode aufgefallen, das kein Layout definiert ist ...

Eingentlich kann es daran auch nicht liegen, ich meine Default mäßig wird FlowLayout verwendet ...



Swing (Java) ? Wikipedia

Java:
JLabel j1 = new JLabel();
		j1.setText("some Text ....");

// Konstruktor new JLabel("some Text ...."); ebenfalls zulässig
 
Zuletzt bearbeitet:
String Zeile = Datei.readLine();
if (Zeile == null) Dateiende = true;

das heißt im Klartext, daß erst wenn Zeile null ist, die while schleife beendet wird - dann ist also die variable zeile = null ---- JFrame(null) kann ja auch nichts ergeben!!

du musst die while schleife verändern und einen globalen string mit dem inhalt .readlines() füllen.

zB so:

String meintest=null;

while (!Dateiende)
{
String Zeile = Datei.readLine();
meintest=meintest + Datei.readLin();
if (Zeile == null) Dateiende = true;
}

JLabel(meintest);
 
Hallo,

danke mal für eure Antworten.

Aber ich bekomme nichts angezeigt, wenn ich es als JAR-starte. Aktueller Code:

Java:
package rahmen3;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Fenster3
{


public static void main(String[] args)
  {
	String Zeile=null;
	    try
	    {
	      BufferedReader Datei = new BufferedReader (new FileReader("e:\\Dokumente\\Java\\Beispiele\\Fenster3\\src\\rahmen3\\test.txt"));
	      boolean Dateiende = false;
	      while (!Dateiende)  // while (Datei.ready())
	      {
	        Zeile = Datei.readLine();
	        if (Zeile == null) Dateiende = true;
	      }
	      Datei.close();
	      }
	    catch (IOException x)
	    {
	      JOptionPane.showMessageDialog (null, "Kann Daten nicht laden!");
	      System.exit (0);
	    }
	  
    JFrame Rahmen = new JFrame("Test ...");
    Rahmen.setSize (400,300);
    Rahmen.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    JPanel Platte = new JPanel ();

    
    JLabel lab = new JLabel (Zeile);

	
    Platte.add (lab);

    Rahmen.setContentPane (Platte);
    Rahmen.setVisible(true);
  }
}
Die *.txt müsste sich am richtigen Platz befinden.

Zu Frage 1:

Wie kann ich es einstellen, dass Java die Datei auch ohne dem vollständigen (absoluten) Pfad findet, sondern mit dem relativen bspw.: textdatei.txt ?

Zu Frage 2:
Danke.

>> Zitat Volvagia
4) Streams/Reader/Writer sollten man am Besten in einer finally schließen.
<<

Und was sollte diese "finally" bewirken?

MfG,
comiplo
 
Wie kann ich es einstellen, dass Java die Datei auch ohne dem vollständigen (absoluten) Pfad findet, sondern mit dem relativen bspw.: textdatei.txt ?
Indem du textdatei.txt im richtigen Verzeichnis ablegst. Lass dir doch mal new File().getAbsolutePath(); ausgeben, dann siehst du wo das aktuelle arbeitsverzeichnis ist. In dem verzeichnis muss dann auch deine textdatei liegen.

Und was sollte diese "finally" bewirken?
Der finally Block wird immer ausgeführt, auch falls irgendwo ne Exception fliegt, oder vorher nen return steht. So kannst du sichergehen dass deine Streams immer korrekt geschlossen werden.
 
Indem du textdatei.txt im richtigen Verzeichnis ablegst. Lass dir doch mal new File().getAbsolutePath(); ausgeben, dann siehst du wo das aktuelle arbeitsverzeichnis ist. In dem verzeichnis muss dann auch deine textdatei liegen.
Wäre es möglich, für einen Code, wo das im selben Verzeichnis liegt?
Und, könntest du bitte ein Beispiel für das new File().getAbsolutePath(); posten?
Wie muss ich das dann in den Reader einbauen?

Der finally Block wird immer ausgeführt, auch falls irgendwo ne Exception fliegt, oder vorher nen return steht. So kannst du sichergehen dass deine Streams immer korrekt geschlossen werden.
Eclipse hat sowas auch schon mal als Fehlermeldung geschrieben. Wie sieht denn das finally aus bzw. wie sieht ein leeres aus? Für die Exception hab ich ja schon den catch - Zweig ...

MfG,
comiplo
 
Und, könntest du bitte ein Beispiel für das new File().getAbsolutePath(); posten?
Java:
    public static void main (String[] args)  {
        String dest = new File("").getAbsolutePath();
        System.out.println(dest);
    }
Das gibt dir ne Pfadangabe aus, das working directory. Wenn du darin deine Textdatei ablegst dann kannst du das File so laden:
Java:
BufferedReader Datei = new BufferedReader (new FileReader("textdatei.txt"));

Wie sieht denn das finally aus
So z.b.:
Java:
try {
    BufferedReader datei = new BufferedReader etc.;
    String daten = // daten lesen
    datei.close();

    return daten;
} catch (IOException ioe) {
    // exception handling
} finally {
    try {
        datei.close();
    } catch (IOException ioe) { /** ignore */ }
}
Aus dem Teil im finally block bau man sich in der Regel ne
Code:
safeClose(Closable closable)
Methode, damit spart man sich dann die unnötigen catches.
 
Hallo,

meinst du so?

[Java]
package rahmen3;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Fenster3
{


public static void main(String[] args)
{
String Zeile=null;
String dest = new File("test.txt").getAbsolutePath();
try
{
BufferedReader Datei = new BufferedReader (new FileReader("dest"));
boolean Dateiende = false;
while (!Dateiende) // while (Datei.ready())
{
Zeile = Datei.readLine();
if (Zeile == null) Dateiende = true;
}
Datei.close();
}
catch (IOException x)
{
JOptionPane.showMessageDialog (null, "Kann Daten nicht laden!");
} finally {
try {
Datei.close();
} catch (IOException ioe) { /** ignore */ }
}

JFrame Rahmen = new JFrame("Test ...");
Rahmen.setSize (400,300);
Rahmen.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
JPanel Platte = new JPanel ();


JLabel lab = new JLabel (Zeile);


Platte.add (lab);

Rahmen.setContentPane (Platte);
Rahmen.setVisible(true);
}
}
[/Java]
Ich verstehe nur nicht, wieso Datei 2 mal geschlossen werden soll. Egal welches von den beiden ich weglösche, ich bekomme immer eine Fehlermeldung.
Wenn ich es aus der finally-Schleife lösche, meint Java wohl, dass die Schleife unnötig sei, wo es ja auch recht hat. Wenn ich es aber nach der while-Schleife lösche, kommt:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Datei cannot be resolved

at rahmen3.Fenster3.main(Fenster3.java:35)


Was tun?
MfG,
comiplo
 
Ich verstehe nur nicht, wieso Datei 2 mal geschlossen werden soll.
Stell dir vor beim lesen fliegt eine IOException, wo wird dann der Stream geschlossen? 😉
Aus dem try kann dann die close() operation raus, das erledigt ja das finally. Du musst Datei dann aber VOR dem try definieren, sonst kann der finallyblock nicht darauf zugreifen.
 
Hallo,

wie schon mal gefragt: meinst du so?

[Java]

package rahmen3;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Fenster3
{


public static void main(String[] args)
{
String Zeile=null;
String dest = new File("test.txt").getAbsolutePath();
BufferedReader Datei = new BufferedReader (new FileReader("dest"));
try
{

boolean Dateiende = false;
while (!Dateiende) // while (Datei.ready())
{
Zeile = Datei.readLine();
if (Zeile == null) Dateiende = true;
}
}
catch (IOException x)
{
JOptionPane.showMessageDialog (null, "Kann Daten nicht laden!");
} finally {
try {
Datei.close();
} catch (IOException ioe) { /** ignore */ }
}

JFrame Rahmen = new JFrame("Test ...");
Rahmen.setSize (400,300);
Rahmen.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
JPanel Platte = new JPanel ();


JLabel lab = new JLabel (Zeile);


Platte.add (lab);

Rahmen.setContentPane (Platte);
Rahmen.setVisible(true);
}
}
[/Java]
Da kommt:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Unhandled exception type FileNotFoundException

at rahmen3.Fenster3.main(Fenster3.java:19)

Was jetzt?

MfG,
comiplo
 
Java:
    String dest = new File("test.txt").getAbsolutePath();
    BufferedReader Datei = new BufferedReader (new FileReader("dest"));
Das macht doch gar keinen sinn. ???:L
Code:
new File("").getAbsolutePath();
gibt dir an wo das Working directory (Working directory - Wikipedia, the free encyclopedia) ist.
In DIESEM ORDER würde er nach der einer suchen wenn du sie über den relativen Pfand ansprichst:
Code:
new FileReader("datei.txt");
 
Ups, offenbar hab ich das Beispiel falsch verstanden, sorry 😳

Nichtsdestotrotz bekomme ich immer noch den selben Fehler:

[Java]

package rahmen3;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Fenster3
{


public static void main(String[] args)
{
String Zeile=null;
String dest = new File("").getAbsolutePath();
BufferedReader Datei = new BufferedReader (new FileReader("test.txt"));
try
{

boolean Dateiende = false;
while (!Dateiende) // while (Datei.ready())
{
Zeile = Datei.readLine();
if (Zeile == null) Dateiende = true;
}
}
catch (IOException x)
{
JOptionPane.showMessageDialog (null, "Kann Daten nicht laden!");
} finally {
try {
Datei.close();
} catch (IOException ioe) { /** ignore */ }
}

JFrame Rahmen = new JFrame("Test ...");
Rahmen.setSize (400,300);
Rahmen.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
JPanel Platte = new JPanel ();


JLabel lab = new JLabel (Zeile);


Platte.add (lab);

Rahmen.setContentPane (Platte);
Rahmen.setVisible(true);
}
}
[/Java]
Fehler: siehe oben ...
 
>>
Liegt die Datei mittlerweile im richtige verzeichnis?
<<
Die liegt im selben Verzeichnis, wie die *.java Datei ...

>>
String dest = new File("").getAbsolutePath();
Was bezweckst du mit der Zeile?!
<<
Öhm, muss man zwischen den "" was reinschreiben?
Nirgends in deinen Posts stand was davon, dass man den Befehl verändern muss ...
 
Die liegt im selben Verzeichnis, wie die *.java Datei ...
Und da liegt die vermutlich falsch...
Hast du dir mal den Wiki Artikel zum working directory durchgelesen und verstanden?


Öhm, muss man zwischen den "" was reinschreiben?
Nirgends in deinen Posts stand was davon, dass man den Befehl verändern muss ...
Ich habe dir aber geschrieben, dass dir mein Code das working directory ausgibt. Ich habe außerdem nirgends geschrieben, dass du den Code in dein Programm setzen sollst.
 
>>
Und da liegt die vermutlich falsch...
Hast du dir mal den Wiki Artikel zum working directory durchgelesen und verstanden?
<<
Und wohin sonst damit??
Durchgelesen ja, verstanden nein ...

>>
Ich habe dir aber geschrieben, dass dir mein Code das working directory ausgibt. Ich habe außerdem nirgends geschrieben, dass du den Code in dein Programm setzen sollst.
<<
Und was muss ich nach der Ausgabe damit machen??
Und was ist hiermit: klick. Da hab ich es so verstanden, dass ich es in die main-Methode setzen muss ...

Bevor ich noch weiteres nicht verstehe kann mir jemand eine korrigierte Version meines Programms geben und evtl. erklären?

MfG
 
Bevor ich noch weiteres nicht verstehe kann mir jemand eine korrigierte Version meines Programms geben und evtl. erklären?
Dein Programm ist korrekt. Du musst nur die Datei ins richtige Verzeichnis legen.

Java:
        String dest = new File("").getAbsolutePath();
        System.out.println(dest);
Führe den Code doch einfach mal aus. Du wirst sehen dass er (wahrscheinlich) nicht den Pfad deiner .java Datei ausspuckt 🙂
In dieses Verzeichnis legst du dann deine Textdatei. Dann läuft dein Code.
 
Um das zu kriegen musste ich das ganze mit BufferedReader löschen und nach dem Test wieder einfügen, da ja immer noch der Fehler kommt ...

So dämlich das jetzt klingen mag, es kommt immer noch der Fehler oO

Soll ich mal meine Dateien als *.zip anhängen?

Es kommt nach wie vor:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Unhandled exception type FileNotFoundException

at rahmen3.Fenster3.main(Fenster3.java:20)

[Java]
package rahmen3;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Fenster3
{


public static void main(String[] args)
{
String Zeile=null;
String dest = new File("").getAbsolutePath();
System.out.println(dest);
BufferedReader Datei = new BufferedReader (new FileReader("test.txt"));
try
{

boolean Dateiende = false;
while (!Dateiende) // while (Datei.ready())
{
Zeile = Datei.readLine();
if (Zeile == null) Dateiende = true;
}
}
catch (IOException x)
{
JOptionPane.showMessageDialog (null, "Kann Daten nicht laden!");
} finally {
try {
Datei.close();
} catch (IOException ioe) { /** ignore */ }
}

JFrame Rahmen = new JFrame("Test ...");
Rahmen.setSize (400,300);
Rahmen.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
JPanel Platte = new JPanel ();


JLabel lab = new JLabel (Zeile);


Platte.add (lab);

Rahmen.setContentPane (Platte);
Rahmen.setVisible(true);
}
}
[/Java]

MfG
 

Neue Themen


Zurück
Oben