Znak, że jest wykonywany kod

0

Pytanie odnośnie JAVA okienkowej. Jak wstawić znak, który będzie informował, że właśnie wykonuje się kod? Taki znak czekania.

0

Mozesz sobie jakiegoś gifa przygotowac, wyswietlic go przed wywolaniem tego duzego kodu i schowac po wykonaniu. Ewentualnie mozesz tez zmienic kursor na waiting albo po prostu w jakiejs labelce wypisac "program sie wykonuje" - na podobnej zasadzie jak z gifem

0

Dzięki za podpowiedzi. Na razie zdecyduję się tylko na wyświetlanie w labelce np. "Czekaj". W jaki sposób wyświetlić ten napis przed wykonaniem kodu i schować po wykonaniu? Program, po kliknięciu w Button, zbiera dane wpisane w kilku polach i przetwarza je w pętli.

0

Jak to "jak wyswietlic napis przed wykonaniem kodu"?:P No trzeba zrobic to przed wykonaniem kodu, ktory cos duzo mieli, nie podam Ci konkretnego numeru lini, bo go nie znam;p

0

No to wstaw w zdarzeniu Buttona na samym początku label1.setVisible(true); a na samym końcu label1.setVisible(false);

A jeżeli z gór znasz liczbę "obrotów" pętli to przyjrzyj się wspomnianemu Progress Bar :)

0

Wg standardów Windowsowych powinieneś przynajmniej zmienić ikonkę:

http://www.javaspecialists.eu/archive/Issue065.html
http://www.catalysoft.com/articles/busycursor.html

0

Jeszcze odnośnie labela. Co robię źle, bo label się nie wyświetla?

W klasie

public jakasKlasa()

deklaruję:

 lCzekanie = new JLabel("Czekaj...");
 lCzekanie.setBounds(800,150,100,30);

a w

public void actionPerformed(ActionEvent e)

deklaruję:

 lCzekanie.setVisible(true);

W jakasKlasa chyba powinno być jeszcze:

add(lCzekanie);

ale wtedy label wyświetla się cały czas, jeszcze przed kliknięciem Buttona.

0

W JakasKlasa Powinno być

add(lCzekanie);
lCzekanie.setVisible(false);

Wyświetlanie (i usuwanie) informacji typu "Czekaj" musi być w innym wątku niż czasochłonna operacja.

0

Po dłuższej przerwie wracam do tematu (przez jakiś czas nie mogłem się nim zająć).

Nie udaje mi się wywoływać drugiego wątku w zdarzeniu Buttona. Żeby jeszcze to sprawdzić napisałem sobie krótki kod:

public class WatekGlowny extends JFrame implements ActionListener
{ 
	JTextArea notatnik;
	JButton przycisk_TestujWatki, przycisk_WyczyscNotatnik;
	
	public WatekGlowny()
	{ 		
		setSize(700,400);
		setTitle("Test Wątków");
		setLayout(null);
		
		notatnik = new JTextArea();
		JScrollPane poleWynikow = new JScrollPane(notatnik);
		poleWynikow.setBounds(50,200,900,500);
		add(poleWynikow);	
		
		przycisk_TestujWatki = new JButton ("TESTUJ WĄTKI");
		przycisk_TestujWatki.setBounds(200,100,150,50);
		add(przycisk_TestujWatki);
		przycisk_TestujWatki.addActionListener(this);
			
		przycisk_WyczyscNotatnik = new JButton ("WYCZYŚĆ WYNIKI");
		przycisk_WyczyscNotatnik.setBounds(400,100,150,50);
		add(przycisk_WyczyscNotatnik);
		przycisk_WyczyscNotatnik.addActionListener(this);			
	} 
		
	
	public static void main(String[] args) throws IOException 
	{
		WatekGlowny aplikacja = new WatekGlowny();
		aplikacja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		aplikacja.setExtendedState(JFrame.MAXIMIZED_BOTH);
		aplikacja.setVisible(true);		
	}	
		
	
	@Override
	public void actionPerformed(ActionEvent e)
	{ 
		Object source = e.getSource();	
		
		if (source==przycisk_TestujWatki)
		{	
			notatnik.append("\n Tworzę nowy wątek");
		
			Watek2 w2 = new Watek2();
			Thread drugiWatek = new Thread(w2);
						
			notatnik.append("\n Uruchamiam nowy wątek");			
			drugiWatek.start();
		}
	
         else if (source==przycisk_WyczyscNotatnik)
 	   {
 	       notatnik.setText("");  
        } 
			
    }
}

i druga Klasa:

public class Watek2 extends WatekGlowny implements Runnable
{ 	
	@Override
	public void run() 
	{	
		notatnik.append("Watek2 działa");		
    }					
}

Dlaczego to nie działa?

0

Dzięki Rossik. Próbując bawić się w programowanie ciągle natrafiam na jakieś problemy.:) Z czym polecacie się zapoznać w sprawie wątków i GUI? Czy np. SwingWorker?

0

proponuje zapoznac sie ogolnie z jakimis kursami o watkach i swingu w javie. Dobrze opisane jest to w kursach pjwstk przedmiot programowanie obiektowe dzial swing i wspolbieznosc. Powinno Ci sie wyklarowac ja czytalem i cos w glowie zostalo.

0

Dlaczego klasa Watek2 dziedziczy po klasie WatekGlowny?
Zmień kod (przy okazji nauczysz się współpracy dwóch klas ;) ).

...
        if (source==przycisk_TestujWatki)
        {    
            notatnik.append("\n Tworzę nowy wątek");
 
            Watek2 w2 = new Watek2(this);
            Thread drugiWatek = new Thread(w2);
 
            notatnik.append("\n Uruchamiam nowy wątek");            
            drugiWatek.start();
        }
...
public class Watek2 implements Runnable
{
    private WatekGlowny mainThread;
    public Watek2(WatekGlowny mainThread)
    {
        this.mainThread = mainThread;
    }
    @Override
    public void run() 
    {    
        mainThread.notatnik.append("\nWatek2 działa");        
    }                    
}
0

Dzięki bogdans.
To pokazuje mi, ile jeszcze muszę się uczyć. Wątpię, czy kiedykolwiek uda mi się sprawnie posługiwać JAVA.

1 użytkowników online, w tym zalogowanych: 0, gości: 1