Bekomme bein Buttonklick das Jtextfield nicht ausgegeben

StefanF195

Mitglied
Hallo Liebe Java Freunde,
ich habe ein für euch sicherlich einfaches Problem. Ich kann mir auch einfach nicht erklären,warum es nicht funktioniert.
Ich habe ein Jtextfield und einen Button.
Wenn ich nun auf den Button klicke, möchte ich den Inhalt aus dem Textfeld in eine Datei schreiben.
Die Datei schreibt er auch, allerdings immer ohne Inhalt.
Vielen Dank für Eure Hilfe. (Den Filechooser könnt ihr außer Acht lassen)

Java:
		textField = new JTextField();
		frame.getContentPane().add(textField, BorderLayout.SOUTH);
		String textFieldValue = textField.getText();
		textField.setColumns(10);
		
		JFileChooser fileChooser = new JFileChooser();
		fileChooser.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			//	System.out.println(textFieldValue);
			}
		});
		frame.getContentPane().add(fileChooser, BorderLayout.EAST);
		
		JButton btnTest = new JButton("Test2");
		btnTest.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try{System.setOut(new PrintStream(new File("test.txt")));
				 System.out.println(textFieldValue);
				}
				catch(IOException e1) {
				      e1.printStackTrace();
				    }
			}
		});
 

VfL_Freak

Top Contributor
Moin,

um mal so ins Blaue zu raten :

Wird hier Exception geworfen ??
Java:
try
{
    System.setOut (new PrintStream(new File("test.txt")) );
    System.out.println( textFieldValue );
}
catch(IOException e1) 
{
    e1.printStackTrace();
}
Ist "textFieldValue" an der Stelle wirklich bekannt/gefüllt ??

Gruß
Klaus
 

Network

Top Contributor
Du musst den Stream auch schließen "close()" oder zwischenzeitlich spülen "flush()", sonst speichert der Stream die Daten nur zwischen und schreibt nicht.

(Außerdem wirft dein Code bei mir eine Exception. Aber nur Nebensache)

Um das Problem zu beheben musst du hier
Java:
System.setOut(new PrintStream(new File("test.txt")));
das hier schreiben
Java:
System.setOut(new PrintStream(new File("test.txt"), true));

Um autoflushing zu aktivieren.
Das steht aber nebenbei auch in der Dokumentation gleich als erstes:
Creates a new print stream, without automatic line flushing[...]
Das gilt für die meisten Stream-Klassen in der Java Standard Library.

Gruß
Net
 
Zuletzt bearbeitet:

StefanF195

Mitglied
Hey vielen Dank für deine Antwort.
Ich habe das geändert, erhalte dann aber den Fehler:
The constructor PrintStream(File, boolean) is undefined
remore argument to match 'PrintStream(File)'
 

Network

Top Contributor
Entschuldige, die richtige Lösung lautet natürlich so:
Java:
System.setOut(new PrintStream(new FileOutputStream(new File("test.txt")), true));

Hoffe jetzt stimmts.
Der PrintWriter macht in seinem Constructor auch nichts anderes als einen neuen FileOutputStream zu erzeugen. Muss man bei diesem Constructor mit Autoflushing manuell schreiben.
 
Zuletzt bearbeitet:

StefanF195

Mitglied
Danke hat hingehauen.
Allerdings ändert das leider immer noch nichts am aktuellen Problem...
Er schreibt einfach die Eingabe nirgends hin. Es scheint als würde er sie nicht einmal lesen ...
 

StefanF195

Mitglied
hat nieman weiter eine Idee `?
Hier nochmal der ganze Quelltext, vllt hab ich da was übersehen.
Java:
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;

import java.awt.BorderLayout;

import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JFileChooser;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

import javax.swing.JButton;


public class EgoGui2 {

	private JFrame frame;
	private JTextField textField;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					EgoGui2 window = new EgoGui2();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public EgoGui2() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 1088, 776);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JLabel label = new JLabel("Egozentrierter CSV Filter");
		label.setHorizontalAlignment(SwingConstants.CENTER);
		label.setFont(new Font("Serif", Font.PLAIN, 15));
		label.setForeground(Color.RED);
		frame.getContentPane().add(label, BorderLayout.NORTH);
		
		JLabel label2 = new JLabel("Geben Sie den Namen der zu filternden Person ein");
		label2.setHorizontalAlignment(SwingConstants.CENTER);
		label2.setBounds(0, 20, 50, 20);
		
		frame.getContentPane().add(label2, BorderLayout.WEST);
		
		textField = new JTextField();
		frame.getContentPane().add(textField, BorderLayout.SOUTH);
		String textFieldValue = textField.getText();
		textField.setColumns(10);
		
		JFileChooser fileChooser = new JFileChooser();
		fileChooser.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			//	System.out.println(textFieldValue);
			}
		});
		frame.getContentPane().add(fileChooser, BorderLayout.EAST);
		
		JButton btnTest = new JButton("Test2");
		btnTest.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg1) {
				try{
					System.out.println(textFieldValue);
					System.setOut(new PrintStream(new FileOutputStream(new File("test.txt")), true));
				 
				}
				catch(IOException e1) {
				      e1.printStackTrace();
				   //   System.err.println(e1);
				    }
			}
		});
		frame.getContentPane().add(btnTest, BorderLayout.CENTER);
	}

}
 

Network

Top Contributor
Okay dein Code hat gleich mehrere Probleme.

1. Der String textFieldValue ist nicht sichtbar in der Methode actionPerformed (Zeile 90). Es wundert mich sehr das du keine Exception bekommst, das sollte garnicht starten.
Das hatte ich auch bereits oben nebenbei erwähnt zu deinem kleinen Codeausschnitt.

2. Zeile 90 und Zeile 91 sind vertauscht. Die Ausgabe erfolgt bevor du den FileOutputStream kreiert und gesetzt hast.

3. Wie von VfL_Freak angemerkt zu deinem Codeausschnitt hat textFieldValue keinen Wert, bzw den String = "". Du teilst der String Variable den Wert des JTextFields direkt nach dem Erstellen zu, natürlich steht zu dem Zeitpunkt noch garnichts darin. Die Variable ist unabhängig von der JTextField internen Variable und verändert sich nicht mit ihr.

Hier ist der Code mal etwas mehr aufgeräumt und funktionierend.
Ich habe die oben genannten Punkte beseitigt sowie:
- Den ActionListener sauberer implementiert
- Den Stream direkt am Anfang des Programmes gesetzt, damit er nicht immer und immer wieder neu kreiert wird.

Java:
package de.tmscience.sciencelab.testchamber142;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class EgoGui2 implements ActionListener {
	
	private JFrame		frame;
	private JTextField	textField;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			System.setOut(new PrintStream(new FileOutputStream(new File("debug.txt")), true));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				try {
					EgoGui2 window = new EgoGui2();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	
	/**
	 * Create the application.
	 */
	public EgoGui2() {
		initialize();
	}
	
	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 1088, 776);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JLabel label = new JLabel("Egozentrierter CSV Filter");
		label.setHorizontalAlignment(SwingConstants.CENTER);
		label.setFont(new Font("Serif", Font.PLAIN, 15));
		label.setForeground(Color.RED);
		frame.getContentPane().add(label, BorderLayout.NORTH);
		
		JLabel label2 = new JLabel("Geben Sie den Namen der zu filternden Person ein");
		label2.setHorizontalAlignment(SwingConstants.CENTER);
		label2.setBounds(0, 20, 50, 20);
		
		frame.getContentPane().add(label2, BorderLayout.WEST);
		
		textField = new JTextField();
		frame.getContentPane().add(textField, BorderLayout.SOUTH);
		textField.setColumns(10);
		
		JFileChooser fileChooser = new JFileChooser();
		frame.getContentPane().add(fileChooser, BorderLayout.EAST);
		
		JButton btnTest = new JButton("Test2");
		btnTest.addActionListener(this);
		btnTest.setActionCommand("WriteToFile");
		frame.getContentPane().add(btnTest, BorderLayout.CENTER);
	}
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		if (arg0.getActionCommand().equals("WriteToFile"))
			System.out.println(textField.getText());
	}
}

Schaus dir mal an, kannst auch wieder umschreiben wenn es dir vorher lieber war ;)
Grüße
Net
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Bekomme (u.a) javafx.fxml.LoadException trotz "korrektem" Code AWT, Swing, JavaFX & SWT 8
G Bekomme ResultSet mittels ObservableList nicht ins TableView AWT, Swing, JavaFX & SWT 25
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
G AWT Wie bekomme ich einen zeitgesteuerten robot hin? AWT, Swing, JavaFX & SWT 6
T bekomme keinen Focus auf JTextField AWT, Swing, JavaFX & SWT 3
Madlip SWT Wie bekomme ich e.getSource xxx AWT, Swing, JavaFX & SWT 2
A Bekomme das Label nicht in die Mitte von Reihe AWT, Swing, JavaFX & SWT 7
L Wie bekomme ich ein Mehrzeiliges JTextField? AWT, Swing, JavaFX & SWT 12
P Swing Wie bekomme ich eine Referenz auf ein Objekt das im EDT erzeugt wird? Und anderes... AWT, Swing, JavaFX & SWT 8
I Swing Wie bekomme ich den Fokus für einen JPanel AWT, Swing, JavaFX & SWT 5
pinerski Swing Wie bekomme ich bei einer JComboBox den Text? AWT, Swing, JavaFX & SWT 2
K bekomme Seitenwechsel nicht hin AWT, Swing, JavaFX & SWT 4
S Hilfe! Bekomme Daten nicht ausgelesen AWT, Swing, JavaFX & SWT 3
V Hilfe :( bekomme textarea nicht versetzt AWT, Swing, JavaFX & SWT 2
W Vom JPanel bekomme ich keine Events AWT, Swing, JavaFX & SWT 5
I selectedText: Wie bekomme ich Zugriff auf den Text? AWT, Swing, JavaFX & SWT 4
H Bekomme den TreeSelectionListener nicht zum Laufen AWT, Swing, JavaFX & SWT 5
V SWT (JFace): bekomme das FormLayout nicht hin. AWT, Swing, JavaFX & SWT 4
G Wie bekomme ich ein JFrame/JDialog zum Blinken? AWT, Swing, JavaFX & SWT 6
E Wie bekomme ich hier ein vertikale JScrollPane hin?? AWT, Swing, JavaFX & SWT 4
G Bekomme immer: NullPointerException AWT, Swing, JavaFX & SWT 2
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
J JavaFX Scene - Buttonklick abwarten AWT, Swing, JavaFX & SWT 4
A JPanel wird nach Buttonklick nicht angezeigt AWT, Swing, JavaFX & SWT 2
J JavaFX Subfenster bei Buttonklick/Menüauswahl AWT, Swing, JavaFX & SWT 5
C Methode über Buttonklick starten AWT, Swing, JavaFX & SWT 8
F JFrame nach Buttonklick 3 Sekunden warten, bevor es sich ändert AWT, Swing, JavaFX & SWT 2
J Spielstart nach Buttonklick AWT, Swing, JavaFX & SWT 4
X Swing Bei Buttonklick soll PopupMenu erscheinen AWT, Swing, JavaFX & SWT 2
B Ein Actionaufruf durch Entertaste oder Buttonklick? AWT, Swing, JavaFX & SWT 7
B JFrame bei buttonklick schließen AWT, Swing, JavaFX & SWT 2
L JTable nach Buttonklick auslesen [NetBeans] AWT, Swing, JavaFX & SWT 4
E Zugriff auf JTextField nach Buttonklick AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben