ActionListener außerhalb des EDT ausführen

Murcer

Mitglied
Hallo,

ich habe folgendes Problem: bei dem folgendem Programm hängt sich das Programm wenn man auf den Button klickt auf

Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Main {

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable(){

			@Override
			public void run() {
				JFrame frame = new JFrame();
				frame.setLayout(new BorderLayout());
				JButton button = new JButton("Klick mich!");
				button.addActionListener(new ActionListener(){

					@Override
					public void actionPerformed(ActionEvent arg0) {
						while (true);
					}
					
				});
				
				frame.add(button);
				frame.pack();
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);
			}
			
		});

	}

}

Das ist ja ganz logisch, weil das Prgramm andauernt in der while-Schleife hängt. Da die while-Schleife im EDT ausgeführt wird kann man das GUI nicht mehr benutzen.
Normalerweise haut man natürlich da keine Endlosschleife rein aber bei komplexeren Funktionen kann es schon mal zu Verzögerungen kommen. Meine Frage: Wie führe ich die Endlosschleife außerhalb des EDT aus?
Mit EventQueue.invokeLater() kann ich ja ein Runnable auf den EDT schieben. Ich bräuchte jetzt also ne Funktion um wieder etwas runterzuholen.
Ich hoffe ihr könnt mir helfen!
Viele Grüße Murcer!
 
einfach einen neuen Thread erstellen und diesen starten?

Java:
				button.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent arg0) {
						new Thread(new Runnable() {
							@Override
							public void run() {
								 while (true){
									 System.out.println("mööp");
								 }
							}
						}).start();
					}

				});
 

Neue Themen


Zurück
Oben