Inhalt einer JTextArea wird nicht dargestellt

GGK_01

Bekanntes Mitglied
Hallo,

ich schreibe ein Programm, das sich via SSH eine Textdatei am Server ausliest und bestimmt Zeilen der Datei in eine JTextArea schreiben soll.

Ziel:
Beim Programmstart soll dann die JTextArea automatisch befüllt werden.

Im Rahmen der Programmentwickling hab ich mir einen Button gebaut der das tut, was am Ende automatisiert ablaufen soll. Drücke ich den Button, dann wird die JTextArea befüllt.

Kurios:
Wenn ich den Inhalt der JTextArea über getText() auslese, dann erhalte ich den Text.
Diesen dann wieder in die JTextArea einzulesen geht aber auch nicht. Ich kann auch keinen manuellen Text in die JTextArea einlesen. Die bleibt einfach leer...die Programmzeilen werden jedoch erreicht.

Was ist der Unterschied:
anstatt dem Aufruf der Methode getFile() im ActionListener des JButtons hab ich in meiner Main-Methode folgende Zeilen eingefügt:
Java:
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GetContent frame = new GetContent ();
					frame.setVisible(true);
					GetContent getFileStart = new GetContent();
                              getFileStart.getFile();
					
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

Es wäre schön, wenn mir jemand Hilfe geben kann.

Danke GGK
 
Zuletzt bearbeitet:
welche Lösung schlägst du mir vor?

es werden Daten eingelesen...
mit textArea.getText() erhalte ich die Zeilen...also gibt es eine Quelle

GGK
 
Ach GetContent ist eine eigene Klasse von dir?
Hätte mich sonst nämlich schon gefragt, was das für ein merkwürdiger Datentyp sein soll. ???:L

Wie sieht deine GetContent Klasse aus?
Wie schaut die Lesemethode aus?

Wir können leider nicht hellsehen 😀
 
Zuletzt bearbeitet:
ja...getContent ist die Klasse.

ich kann hier nicht die gesamte Klasse anführen...ich hoffe jedoch, dass damit mehr Klarheit herrscht

also nur ein Auszug:

Java:
public class getContent extends JFrame {
static JTextArea textField;
LinkedList totalList = new LinkedList();

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					getContent frame = new getContent ();
					frame.setVisible(true);
					getContent getFileStart = new getContent ();
					getFileStart.getFile();
					
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public getContent () throws IOException {
			// GUI
		textField = new JTextArea();
		textField.setWrapStyleWord(true);
		textField.setFont(new Font("Arial", Font.PLAIN, 10));
		scrollPane_2.setViewportView(textField);
		textField.setColumns(10);
}

	public void getFile() {
		//baut ssh verbindung auf und liest File ein
		Ssh ssh = new Ssh();
		ssh.Ssh(argst);
		// Methode finalList formatiert/filtert Zeilen des gesamten Files und stellt Zeilen in der TextArea dar
		try {
			finalList();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

public void finalList() throws IOException {
		for (int i = 0; i<totalList.size();i++) {
				textField.append(totalList.get(i).toString()+"\n");
}
}
}
 
Zuletzt bearbeitet:
Verstehe.

Klassennamen schreibt man übrigens vorn groß 🙂

Durch diesen Block hier:

Java:
getContent frame = new getContent ();
frame.setVisible(true);
getContent getFileStart = new getContent ();
getFileStart.getFile();

erzeugst du im Konstruktor von getContent 2 mal eine neue TextArea.
Beim 2. Aufruf überschreibst du das Textfeld dadurch, weil es als static deklariert ist und jede Instanz von getContent das gleiche "textField" überschreibt und dann verwendet.

Ich persönlich würde die Logik für das Holen des Inhaltes übrigens in eine separate Klasse auslagern, dann ist das sauber getrennt (weil das Lesen e.g. nichts mit dem JFrame zutun hat).
 
Zuletzt bearbeitet:
OK..danke dir...

ich habe jetzt zwei Möglicheiten:

1) die finalList-Methode in eine eigene Klasse auslagern
2) den Konstruktor so zu ändern, dass die TextArea nur einmal erzeugt wird....

kannst du mir noch erklären, wie ich Punkt 2 umsetze...?

Danke
GGK
 
Ich habe dir das ganze Konstrukt mal auf die schnelle in einer Klasse zusammengebastelt.
Den Rest musst du selbst erledigen.

Java:
public class GetContent extends JFrame {

	static JTextArea textField;
	static LinkedList<String> totalList = new LinkedList<String>();

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GetContent frame = new GetContent ();
					frame.setVisible(true);
					frame.getFile();

					finalList();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public GetContent () {
		textField = new JTextArea();
		textField.setWrapStyleWord(true);
		textField.setFont(new Font("Arial", Font.PLAIN, 10));
		textField.setColumns(10);

		this.add(textField);

		// Weitere Anweisungen, z.B. Fenstergröße
		...
		this.pack();
	}

	public void getFile() {
		// SSH Zeugs und Ablagerung der empfangenen Daten in deine Liste
		...
	}

	public static void finalList() throws IOException {
		for (int i = 0; i<totalList.size();i++) {
			textField.append(totalList.get(i).toString()+"\n");
		}
	}

}
 

Neue Themen


Zurück
Oben