problem mit schleife

esda

Grünschnabel
hi, ich hab hier nen kleines programm geschrieben, womit ich eine scrollbar laufen lasse. mein problem dabei is aber, dass das programm sobald ich den start-button drücken sich in der for-schleife aufhängt. zwar läuft die scrollbar immernoch hin und her, aber ich kann nix anklicken, wodurch ich dann natürlich die scrollbar nicht zum stoppen veranlassen kann.



Code:
import java.awt.*;
import java.awt.event.*;

public class command extends java.applet.Applet
implements ActionListener
{
	Button b1 = new Button("start");
	Button b2 = new Button("stop");
	Scrollbar sb1 = new Scrollbar(0,0,10,0,500);
	Label l1 = new Label();
	
	int a,b=1;

	public void init()
	{ 	setLayout(null);

		add(b1);
		b1.addActionListener(this);
		b1.setBounds(10,10,30,20);
		add(b2);
		b2.addActionListener(this);
		b2.setBounds(50,10,30,20);

		add(sb1);
		sb1.setBounds(10,40,500,20);

		add(l1);
		l1.setBounds(90,10,30,20);
		l1.setBackground(Color.gray);
	}

	public void actionPerformed(ActionEvent e)
	{	if(e.getSource().equals(b1))
		{

				for(a=1;a>=1;a++)
				{	sb1.setValue(a);
					try {Thread.sleep(2);}
					catch (InterruptedException ex) {   }



					if(a==490)
					{	for(a=490;a>=1;a--)
						{	sb1.setValue(a);
							try { Thread.sleep(2);}
							catch (InterruptedException ex) {}
						}
					}
				}
		 }//if
	}//
}//command
 
Hi,

das Problem ist folgendes:

Die Methode actionPerformed() wird im EventDispatcherThread ausgeführt. Dieser ist auch verantwortlich für zeichnen und die Interaktion. Da er aber mit deiner Schleife beschäftigt ist, bzw. regelmäßig schlafen geschickt wird, kann er auf nichts mehr sonst reagieren.

Abhilfe: Swingworker benutzen. https://swingworker.dev.java.net/
 
Hallo,

oder du lagerst deine Scrollaktion in einen Thread aus. Die Methode von firmadankt solltest du dennoch vorziehen ;)
 
Hallo,

ich bitte dich, deine Shift-Taste mal etwas zu strapazieren und auf deine Groß- und Kleinschreibung zu achten.

MFG

Sascha
 
Zurück