JTextArea und Threads

Status
Nicht offen für weitere Antworten.

Antineutrino

Mitglied
Hallo,

ich habe ein Programm geschrieben, das regelmäßig eine Log-Datei ausliest und in einer JTextArea anzeigt. Leider friert das Proframm früher oder später bei
Code:
int i = text.getSelectionStart();
int j = text.getSelectionEnd();
text.setText(s);
text.setSelectionStart(Math.max(i, j));
text.setSelectionEnd(Math.min(i, j));
ein.
Es funktioniert aber, wenn ich
Code:
text.setEnabled(false);
sage und die set/getSelection weglasse. Dann kann ich ja aber nichts mehr mit der Maus markieren.

Woran kann das liegen?

mfg
 

Antineutrino

Mitglied
Das Programm friert ein, wenn der Thread zu kurz schläft. Bei 1000ms z.B. läuft es, allerdings auch nur, wenn ich das get/setSelection weglasse. Dann verascwindet aber ständig die aktuelle Markierung.
 
S

SlaterB

Gast
wenn du ein vollständiges Programm postest, könnte man daran knabbern,
so sehe zumindest ich keinen bekannten Anhaltspunkt,
und vermute stark, dass es mit irgendwas anderem zu tun hat
 

Antineutrino

Mitglied
Hier wird der Text in die TextArea eingetragen:
Code:
public synchronized void setText(String s) {
		text.setText(s);
	}
Hier ist der Thread:
Code:
	public void run() {

		while (true) {
			try {

				FileReader fr = new FileReader(f.getAbsolutePath());
				BufferedReader br = new BufferedReader(fr);
				StringBuffer sb = new StringBuffer();
				String inhalt;

				while (br.ready()) {
					String line = br.readLine();
					sb.append(line);
					sb.append("\n");
				}

				inhalt = sb.toString();
				String view = inhalt.substring(alreadyViewed);

				if (g.getText().equals(view)) {
					somethingNew = false;
				} else {
					somethingNew = true;
				}

				if (somethingNew) {
					g.setText(view);
					System.out.println("scrolle herunter...");
					g.scrollDown();
				}

				br.close();
				fr.close();

				if (ende) {
					break;
				}

				Thread.sleep(1000);

			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}
[/quote]
 
S

SlaterB

Gast
mit 'vollständiges Programm' meinte ich tatsächlich ein vollständiges Programm ;)
aber soll keine Kritik sein, vielleicht hilft es ja wem anders, klarer zu sehen

--------

synchronized ist allerdings ein guter Grund, warum ein Java-Programm sich mal ohne Exception aufhängen sollte
insbesondere sind solche DeadLocks oft abhängig von Wartezeiten, was es noch wahrscheinlicher macht:

Thread A ist in Monitor 1 und wartet auf Zugriff zu Monitor 2
Thread B ist in Monitor 2 und wartet auf Zugriff zu Monitor 1


wenn du dir die Mühe machst da mitzuloggen
(a la System.out.println("Thread x steht vor synchronized-Block y"))
könntest du solche Fehler vielleicht finden,

ist aber aufwendig und vielleicht gar nicht dein Problem ;)
 

Antineutrino

Mitglied
Ich habe nur einen ActionListener, der *einen* Beobachter-Thread (s.o.) startet. Da sollte doch eigentlich kein Deadlock entstehen, oder? Wenn eine neue Datei geöffnet wird, wird ein Flag gesetzt, damit der Thread sich beendet.

Sehr viel länger ist das Programm auch nicht.

Code:
if (e.getActionCommand().equals("Open")) {

			JFileChooser auswahl = new JFileChooser();
			auswahl.setFileFilter(new LOGFilter());
			auswahl.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
			auswahl.showOpenDialog(null);
			File file = auswahl.getSelectedFile();

			if (file != null) {

				if (fw != null) {
					fw.end();
				}

				String path = file.getAbsolutePath();
				g.setTitle(path + " - " + "LogViewer");

				try {

					fw = new FileWatcher(file, g);

					BufferedReader br = new BufferedReader(new FileReader(path));

					StringBuffer sb = new StringBuffer();

					while (br.ready()) {
						sb.append(br.readLine());
						sb.append("\n");
					}

					g.setText(sb.toString());
					br.close();
					fw.start();
					g.scrollDown();

				} catch (FileNotFoundException e1) {
					JOptionPane.showInternalMessageDialog(null, "Datei nicht gefunden.", "Fehler!", JOptionPane.ERROR_MESSAGE);
					System.out.println("Datei konnte nicht gelesen werden.");
				} catch (IOException e2) {
					JOptionPane.showInternalMessageDialog(null, "Fehler beim Lesen der Datei.", "Fehler!", JOptionPane.ERROR_MESSAGE);
					System.out.println("Fehler beim Einlesen der Datei.");
				} catch(StringIndexOutOfBoundsException e3){
					System.out.println("");
				}

			}

		}
 
S

SlaterB

Gast
du hast den Event-Thread und deinen Thread und du weißt gar nicht,
was alles intern vielleicht als synchronisiert markiert ist ;)

aber es ist nur eine Ahnung und ich kann da auch nix weiter zu sagen
 

André Uhres

Top Contributor
Antineutrino hat gesagt.:
Hallo,

ich habe ein Programm geschrieben, das regelmäßig eine Log-Datei ausliest und in einer JTextArea anzeigt. Leider friert das Proframm früher oder später bei
Code:
int i = text.getSelectionStart();
int j = text.getSelectionEnd();
text.setText(s);
text.setSelectionStart(Math.max(i, j));
text.setSelectionEnd(Math.min(i, j));
ein.
Es funktioniert aber, wenn ich
Code:
text.setEnabled(false);
sage und die set/getSelection weglasse. Dann kann ich ja aber nichts mehr mit der Maus markieren.

Woran kann das liegen?

mfg
Die meisten Swing Methoden sind nicht "thread safe".
Weil das "Swing event handling" in einem speziellen Thread, dem "event dispatch thread", läuft,
müssen auch alle anderen Swing Komponentenmethoden auf dem "event dispatch thread" aufgerufen werden.

Programme, die diese Regel ignorieren, könnten zwar die meiste Zeit korrekt funktionieren,
sind aber unvorhersehbaren Fehlern unterworfen, die schwer nachvollziehbar sind.
Wenn der Code nicht im "event dispatch thread" läuft, benutzt man die Methode "SwingUtilities.invokeLater",
damit der Code im "event dispatch thread" ausgeführt wird:
Code:
       SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                int i = text.getSelectionStart();
                int j = text.getSelectionEnd();
                text.setText(s);
                text.setSelectionStart(Math.max(i, j));
                text.setSelectionEnd(Math.min(i, j));
            }
        });
 

Ralf Ueberfuhr

Bekanntes Mitglied
Ergänzung: Möchtest du den Aufruf synchron haben, also warten, bis der Wert im Textfeld gesetzt ist, dann nimmt die Methode SwingUtilities#invokeAndWait(...)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
RedEagle Swing JTextArea ist leer AWT, Swing, JavaFX & SWT 13
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
K Swing 2 JTextArea parrallel scrollable AWT, Swing, JavaFX & SWT 16
Hatsi09 JTextArea Inhalt verlinken AWT, Swing, JavaFX & SWT 4
ralfb1105 jTextArea Scrollbar hinzufügen - mit Jigloo erstellt AWT, Swing, JavaFX & SWT 7
S Ausgabe in JTextArea AWT, Swing, JavaFX & SWT 13
H JTextArea - farbige Zeilen .. bitte um Vorschläge zur Implementierung AWT, Swing, JavaFX & SWT 1
F 2D-Grafik JTextArea drucken bringt mieses Ergebnis AWT, Swing, JavaFX & SWT 2
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
Bluedaishi JtextArea AWT, Swing, JavaFX & SWT 6
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
F JTextarea Steuern ~ consolenanbindung AWT, Swing, JavaFX & SWT 5
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
F JTextArea hat keinen Rahmen AWT, Swing, JavaFX & SWT 10
N JTextArea Events weiterleiten AWT, Swing, JavaFX & SWT 3
R JTextArea mit verschiedenen Textfarben AWT, Swing, JavaFX & SWT 6
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
HoloYoitsu jTextArea.setCaretPosition(); What am I doing wrong? AWT, Swing, JavaFX & SWT 0
S Zeilenumbruch jTextArea mit toString AWT, Swing, JavaFX & SWT 2
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
M JTextArea - Leertaste "sperren" AWT, Swing, JavaFX & SWT 1
S Inhalt der Java-Konsole in die JTextArea AWT, Swing, JavaFX & SWT 3
M Swing JTextArea mit ScrollBar AWT, Swing, JavaFX & SWT 9
S Swing Zahl der Zeilenumbrüche in einer JTextArea bestimmen AWT, Swing, JavaFX & SWT 1
F Swing Caret in JTextArea vergrößern AWT, Swing, JavaFX & SWT 2
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
N JFrame änliches wie JTextArea? AWT, Swing, JavaFX & SWT 2
A Swing JTextArea - Multi-Line-Editing AWT, Swing, JavaFX & SWT 2
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
O JTextArea befüllen AWT, Swing, JavaFX & SWT 2
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
T Swing Ausgabe aus ArrayList in Klasse1 in jTextArea in Klasse2 AWT, Swing, JavaFX & SWT 2
B JTextArea Größe an Container anpassen AWT, Swing, JavaFX & SWT 2
B Drucken der JTextArea AWT, Swing, JavaFX & SWT 4
M JTextArea Zeile hinzufügen AWT, Swing, JavaFX & SWT 4
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
A JTextArea - Zeichenbegrenzung nach .txt Datei import AWT, Swing, JavaFX & SWT 6
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
Hoppelmann Swing Tasten in JTextArea blockieren AWT, Swing, JavaFX & SWT 2
S JTextArea Tastaturanschläge AWT, Swing, JavaFX & SWT 2
E Swing JTextArea in JFrame, wie nun WindowFocusListener implementieren? AWT, Swing, JavaFX & SWT 2
S Problem mit JButton und JTextArea AWT, Swing, JavaFX & SWT 2
J Swing Mitwachsende JTextArea+ JPanel AWT, Swing, JavaFX & SWT 4
P Swing JtextArea füllen mit setText AWT, Swing, JavaFX & SWT 7
M Probleme mit der Selektion einer JTextArea AWT, Swing, JavaFX & SWT 3
T Die Größe einer JTextArea an Ihren Parent JPanel anpassen. AWT, Swing, JavaFX & SWT 5
hdi Swing ListCellRenderer + JTextArea + LineWrap AWT, Swing, JavaFX & SWT 6
T ComponentOrientation in JTextArea AWT, Swing, JavaFX & SWT 3
H Hintergrundbild in jTextArea AWT, Swing, JavaFX & SWT 4
G Swing JTextArea mit fester Anzahl Spalten! AWT, Swing, JavaFX & SWT 10
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
L JTextArea mit JScrollPane AWT, Swing, JavaFX & SWT 7
padde479 Swing replace JTextArea funktioniert nicht AWT, Swing, JavaFX & SWT 2
L Zeilenumbrüche aus JTextArea MIT in Textdatei schreiben AWT, Swing, JavaFX & SWT 4
_dp jTextArea/jTextPanel Auto Höhe AWT, Swing, JavaFX & SWT 5
Ollek JTextArea - Feste Zeilenanzahl(8 Zeilen) AWT, Swing, JavaFX & SWT 3
S Swing JTextArea während der Laufzeit füllen AWT, Swing, JavaFX & SWT 5
Ollek Text in JTextField und JTextArea zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
P Datenelement anderer Klasse in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
P Scrollbar JTextArea AWT, Swing, JavaFX & SWT 23
M Swing Ausgabe in JTextArea verzögern AWT, Swing, JavaFX & SWT 7
T Swing jTextArea soll sich der Fenstergröße anpassen beim ziehen?? AWT, Swing, JavaFX & SWT 2
S System.out in JTextArea AWT, Swing, JavaFX & SWT 4
S Swing JTextArea - Bild auf/ab Tasten implementieren AWT, Swing, JavaFX & SWT 4
J JTextArea verschwindet bei resize vom JFrame AWT, Swing, JavaFX & SWT 2
VfL_Freak "setAccelerator/KeyStroke" bei JTextArea ? AWT, Swing, JavaFX & SWT 6
P Swing JTextArea - beim neuzeichnen bleibt manchmal weißer Kasten AWT, Swing, JavaFX & SWT 10
Dit_ JTextArea zu Zeile X scrollen AWT, Swing, JavaFX & SWT 4
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
B Wechsel JTextArea und JComponent AWT, Swing, JavaFX & SWT 9
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
G Swing JTable und JTextArea synchronisieren AWT, Swing, JavaFX & SWT 2
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
M JTextArea AWT, Swing, JavaFX & SWT 2
E Swing JTextArea Alternative? AWT, Swing, JavaFX & SWT 5
A Swing JTextArea über Frame hinaus anzeigen? AWT, Swing, JavaFX & SWT 2
S JInternalFrame oder JTextArea neu laden AWT, Swing, JavaFX & SWT 2
N JTextArea.setLineWrap Bug? AWT, Swing, JavaFX & SWT 3
N Swing JTextArea/JScrollpane: JScrollbar position AWT, Swing, JavaFX & SWT 8
I JTextArea mit Copy Paste Funktion AWT, Swing, JavaFX & SWT 7
M Swing JTextArea größe anpassen & setBackground liefer Nullpointer AWT, Swing, JavaFX & SWT 4
Plastagen JTextArea CaretPosition Aktualisierung AWT, Swing, JavaFX & SWT 10
C JTextField und JTextArea - Verständnisproblem AWT, Swing, JavaFX & SWT 14
B Exceptions werfen und in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
F new Line in JTextarea AWT, Swing, JavaFX & SWT 15
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8
J Beliebtes Problem: Scrollbar in JTextArea AWT, Swing, JavaFX & SWT 4
w0ddes Swing JTextArea auf JScrollPane - Autoscroll?! AWT, Swing, JavaFX & SWT 2
Developer_X Swing Java JTextArea auto scroll down AWT, Swing, JavaFX & SWT 6
T Swing JTextArea, JTextPane, JEditorPane...Unterschied?! AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben