[erl.] Text JTextarea wird nicht angezeigt

Status
Nicht offen für weitere Antworten.

Nachtfalke

Aktives Mitglied
Hallo allerseits,

ich möchte den Text eines JTextarea innerhalb einer Methode ändern und die Änderung soll sofort angezeigt werden. Da Textarea wird aber erst nach dem Ende der Methode akutalisiert. Hat jemand eine Idee, woran das liegt?

Java:
	public void checkConnections() {

		STAFResult res;

		try {
			// Create a STAFHandle
			this.statusPanel.setText("");
			STAFHandle handle = new STAFHandle("MyApplication");
			try {
				// Submit a synchronous request to the ECHO service on
				// the local machine
				for (int i = 0; i < testumgebung.getSize(); i++) {
                    statusPanel.append(testumgebung.getRechner(i).getRechnerName()
							.toString()	+ ": ");
					res = handle.submit2(testumgebung.getRechner(i).getRechnerName()
							.toString(), "PING", "PING");
				}

			} finally {
				handle.unRegister();
			}
		} catch (STAFException e) {
			JOptionPane.showMessageDialog(null,
					"Es konnte keine Verbindung zu STAF aufgebaut werden.", "Fehler",
					JOptionPane.ERROR_MESSAGE);
			System.out.println("Error (un)registering with STAF, RC:" + e.rc);
		}
	}

Die Methode checkConnections wird über einen Menüpunkt des Hauptfensters mit folgendem ActionListener aufgerufen:

Java:
			checkStafItem.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					checkConnections();
				}
			});
 
Zuletzt bearbeitet:
Die Methode im Event-Dispatch-Thread (EDT) aufgerufen. Der ist verantwortlich für "alles, was mit dem GUI zu tun hat". Die Methode muss in einem eigenen Thread laufen:
Code:
            checkStafItem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    Thread t = new Thread(new Runnable()
                    {
                        public void run()
                        {
                            checkConnections();
                        }
                     });
                     t.start();
                }
            });

Danach muss man aber aufpassen, dass in der Methode nichts mehr gemacht wird, was das GUI verändert. Allerdings ist textArea.append eine Methode, die explizit als "thread safe" bezeichnet (und deswegen dort ERLAUBT) ist. (Andernfalls müßte man die Änderungen am GUI mit SwingUtilities.invokeLater machen)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben