JTextfield aktualisieren

  • Themenstarter Themenstarter marcusi
  • Beginndatum Beginndatum
Moin,

Ich brauche nochmal Hilfe das funtzt nicht mit der aktualisierung
gruß beziehe mich auf den Code von Kai SOS

Was genau klappt denn an dem Beispiel nicht :confused:
Hast gelesen, dass sein Code so ziemlich VHIDT war :confused:

Ein bisschen genauer musst Du schon werden, wenn wir Dir helfen sollen.
Poste am besten mal das, was Du aus seinem Beispiel gemacht hast (JAVA-Tags nicht vergessen) ;)

Gruß
Klaus
 
Billigvariante mit Prüfung alle 1000ms:

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class Main extends JFrame {
	private JTextField tf;
	
	public Main() {

		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

		toFront();
		// setzt die Position des Jrames
		setLocation(550, 80);
		// nimmt min. max. close weg
		setUndecorated(true);
		// JTextArea textArea = new JTextArea();
		tf = new JTextField();
		// kannst du nicht bearbeiten
		tf.setEditable(false);

		JScrollPane scrollPane = new JScrollPane(tf);
		scrollPane.setPreferredSize(new Dimension(230, 50));

		add(scrollPane);
		pack();
		setVisible(true);
		tf.setCursor(null);

		tf.setBackground(Color.red);
		tf.setForeground(Color.green);
		tf.setCaretPosition(tf.getText().length());
		tf.setHighlighter(null);
		
		new Checker().start();
	}

	public String readLine(FileReader reader) throws IOException {
		String line = null;
		for (int readInt = 0; (readInt = reader.read()) != 13 && readInt != -1;) {
			String s = String.valueOf((char) readInt);
			if (line == null)
				line = s;
			else
				line += s;
		}
		reader.read();
		return (line);
	}

	public static void main(String[] args) {
		new Main();
	}
	
	private class Checker extends Thread {
		private FileReader reader;
		private String text;
		
		@Override
		public void run() {
			while(true) {
				try {
					reader = new FileReader("C:\\loi\\data.txt");
					text = null;
					for (String incomingLine = null; (incomingLine = readLine(reader)) != null;) {
						if (text == null)
							text = incomingLine;
						else
							text += " " + incomingLine;
					}
					reader.close();
					if(!text.equals(tf.getText())) {
						tf.setText(text);
					}
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				
				try {
					sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
 
Billigvariante mit Prüfung alle 1000ms:

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class Main extends JFrame {
	private JTextField tf;
	
	public Main() {

		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

		toFront();
		// setzt die Position des Jrames
		setLocation(550, 80);
		// nimmt min. max. close weg
		setUndecorated(true);
		// JTextArea textArea = new JTextArea();
		tf = new JTextField();
		// kannst du nicht bearbeiten
		tf.setEditable(false);

		JScrollPane scrollPane = new JScrollPane(tf);
		scrollPane.setPreferredSize(new Dimension(230, 50));

		add(scrollPane);
		pack();
		setVisible(true);
		tf.setCursor(null);

		tf.setBackground(Color.red);
		tf.setForeground(Color.green);
		tf.setCaretPosition(tf.getText().length());
		tf.setHighlighter(null);
		
		new Checker().start();
	}

	public String readLine(FileReader reader) throws IOException {
		String line = null;
		for (int readInt = 0; (readInt = reader.read()) != 13 && readInt != -1;) {
			String s = String.valueOf((char) readInt);
			if (line == null)
				line = s;
			else
				line += s;
		}
		reader.read();
		return (line);
	}

	public static void main(String[] args) {
		new Main();
	}
	
	private class Checker extends Thread {
		private FileReader reader;
		private String text;
		
		@Override
		public void run() {
			while(true) {
				try {
					reader = new FileReader("C:\\loi\\data.txt");
					text = null;
					for (String incomingLine = null; (incomingLine = readLine(reader)) != null;) {
						if (text == null)
							text = incomingLine;
						else
							text += " " + incomingLine;
					}
					reader.close();
					if(!text.equals(tf.getText())) {
						tf.setText(text);
					}
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				
				try {
					sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
Ram-Verschwendung, schon allein wegen dieser Zeile:
Java:
text += " " + incomingLine;
Aber noch viel krasser finde ich, dass du die Datei jede Sekunde neu einliest. Dass das eine Menge Rechenleistung und Ram braucht, brauch ich ja wohl nich sagen ^^

Ob sich eine Datei geändert hat kann man viel leichter überprüfen, dazu muss man gar nicht wissen, was drin steht ... Die Klasse File bietet die Möglichkeit über die Methode lastModified das Änderungsdatum auszulesen. Wenn man dieses nun zwischenspeichert und in regelmäßigen Abständen überprüft, kommt man auch drauf, ob eine Datei geändert wurde, denn bei einer Änderung wird das Änderungsdatum zwangsweise aktualisiert und das würde heißen, dass das gespeicherte Datum sich von dem neuen Datum unterscheidet => Datei geändert. Das heißt aber noch nicht, dass es wirklich Änderungen gab, könnte auch sein, dass jemand ein Zeichen eingefügt und sofort wieder gelöscht hat. Die meisten Editoren wollen dann aufgrund von Änderungen speichern und das tun die meisten Leute ja dann auch ;)
 
Zuletzt bearbeitet:
Hallo datt funtzt alles super danke euch
wie kriege ich den Text jetzt zum laufen
1000 Dank!!
 
Ram-Verschwendung, schon allein wegen dieser Zeile:
Java:
text += " " + incomingLine;
Aber noch viel krasser finde ich, dass du die Datei jede Sekunde neu einliest. Dass das eine Menge Rechenleistung und Ram braucht, brauch ich ja wohl nich sagen ^^

Ob sich eine Datei geändert hat kann man viel leichter überprüfen, dazu muss man gar nicht wissen, was drin steht ... Die Klasse File bietet die Möglichkeit über die Methode lastModified das Änderungsdatum auszulesen. Wenn man dieses nun zwischenspeichert und in regelmäßigen Abständen überprüft, kommt man auch drauf, ob eine Datei geändert wurde, denn bei einer Änderung wird das Änderungsdatum zwangsweise aktualisiert und das würde heißen, dass das gespeicherte Datum sich von dem neuen Datum unterscheidet => Datei geändert. Das heißt aber noch nicht, dass es wirklich Änderungen gab, könnte auch sein, dass jemand ein Zeichen eingefügt und sofort wieder gelöscht hat. Die meisten Editoren wollen dann aufgrund von Änderungen speichern und das tun die meisten Leute ja dann auch ;)

Deshalb habe ich das auch als "Billigvariante" benannt, im Sinne von: Ich habe mich 3 Minuten damit beschäftigt ohne den Code groß umzuschreiben ;)
 
Zurück