Java thread sleep - nelze zavrit okno – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java thread sleep - nelze zavrit okno – Java – Fórum – Programujte.comJava thread sleep - nelze zavrit okno – Java – Fórum – Programujte.com

 

q
~ Anonymní uživatel
219 příspěvků
8. 6. 2012   #1
-
0
-

Ahoj, predem se omlouvam za strasne zpraseny kod. S Javou zacinam.

Rad bych v cyklu postupne neco vykresloval, napr. radek s textem. Kdyz ale uspim vlakno, tak se program neda zavrit (to chapu). Jde to uspat nejak jinak, nebo je nutne vytvorit pro vykreslovani nove vlakno? To jsem nikdy nedelal.

btw, jak se daji vsechny vykreslene graficke objekty smazat?

package aplikace;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Line2D;
import javax.swing.JApplet;
import javax.swing.JFrame;

public class Test extends JApplet {

	final static int oknoX = 850;
	final static int oknoY = 500;

	public void init() {
		setBackground(Color.white);
		setForeground(Color.white);
	}

	public void paint(Graphics g) {
		int x = 50;
		int y = 50;		
		
		Graphics2D g1 = (Graphics2D) g;
		g1.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g1.setStroke(new BasicStroke(1F));
		g1.setPaint(new Color(224, 224, 224));

		for (int i = 0; i <= 5; i++) { 
			g1.draw(new Line2D.Double(10, (i * 25), 800, (i * 25)));
		}

		while (true) {
			g1.drawString("Hello world!", x, y);
			
			x += 15;
			y += 15;
			
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
	}

	public static void main(String[] args) {

		JFrame f = new JFrame("test");
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		JApplet applet = new Test();
		f.getContentPane().add("Center", applet);
		applet.init();
		f.pack();
		f.setSize(new Dimension(oknoX, oknoY));
		f.setVisible(true);
	}
}

Moc dekuji za pomoc.

Nahlásit jako SPAM
IP: 95.27.3.–
liborb
~ Redaktor
+18
Guru
8. 6. 2012   #2
-
0
-

Každý program má jedno hlavní vlákno. Tím vláknem se obsluhují události, třeba překreslení. A ty jsi udělal to, že jsi do události překreslení dal nekonečnou smyčku, takže tím si vlastně zablokoval aplikaci.

Takže, ano, musíš si na to vytvořit nové vlákno. Řekněme, že chceš, aby se ten nápis Hello world pohyboval. Bude to objekt, kterému v tom vláknu budeš měnit pozici a přes repaint() budeš vyvolávat událost překreslení (paint). V paint pouze vykreslíš objekt na jeho pozici a skončíš. Tím dostaneš pohybující se objekt.

Všechny vykreslené grafické objekty se dají smazat třeba tak, že zavoláš repaint a už je nevykreslíš.

Nahlásit jako SPAM
IP: 78.80.52.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 46 hostů

Podobná vlákna

Thread.sleep() — založil JanH

Nelze zavřít formulář — založil Jakub Dibala

Nefunguje mi sleep — založil Lpoi

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý