Odchytenie premennej v main z Thread – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Odchytenie premennej v main z Thread – Java – Fórum – Programujte.comOdchytenie premennej v main z Thread – Java – Fórum – Programujte.com

 

Test556586
~ Anonymní uživatel
2 příspěvky
23. 2. 2015   #1
-
0
-

Ahojte! 

Mal by som na vás jednu otázku, ohľadom Javy. Pre niekoho to môže byť triviálny problém, ale ja si s ním neviem rady.

Mám class Vlakno1 ktoré používa Thread, v ňom mám uloženú premennú s hodnotou v:

public void run() {
premenna = 1;
}

Pokiaľ vlákno zavolám v main, spustí sa, ale pokiaľ skúsim niečo ako:

System.out.println (v1.premenna);

Číslo ostane na nule, teda nezoberie sa definovaná hodnota. Pričom ak dám výpis v tom run() tak sa premenná vypíše v konzole bez problémov. Ako by som mohol dostať hodnotu premennej aj do main? V main ju volám ako:

Vlakno1 v1 = new Vlakno1();

Ďakujem za pomoc!

Nahlásit jako SPAM
IP: 95.105.210.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
24. 2. 2015   #2
-
0
-

 Abys měl přístup k dané proměnné v jiných třídách je nutno aby daná proměnná byla třídní proměnnou. Jinak se jedná o lokální proměnnou a k ní nelze takto získat přístup. Takže si nastuduj třídní proměnnné ( public, static, příp. gettery/settery ).

class Vlakno extends Thread {
	public int promennaObjektova;
	public static int promennaStaticka;
	private int promennaGetter;
	public int getPromennaGetter() { return this.promennaGetter; }
	....... vnitrek tridy
}
Nahlásit jako SPAM
IP: 217.112.161.–
Test556586
~ Anonymní uživatel
2 příspěvky
24. 2. 2015   #3
-
0
-

#2 NotBeginner

Ďakujem, takéto zdieľanie hodnôt sa mi podarilo, Ja sa pýtam skôr na to, ako túto premennúe dostanem z run do main... pre lepšie pochopenie:

public class Vlakno1 extends Thread{
premenna = 0;
}

public void run() {
premenna = premenna + 5;
}

Ak ju volám z main, tak sa nastaví hodnota, ktorá je uvedená vyššie a nie tá, ktorá sa spracuje v run()

či nastavím premennú na public, alebo nie, stále ten istý výsledok.

Nahlásit jako SPAM
IP: 95.105.210.–
ondrej39+1
Věrný člen
24. 2. 2015   #4
-
0
-

#3 Test556586
Pokud máš proměnnou uvnitř třídy, tak se k ní dá v Javě samozřejmě přistoupit, ale buď ji nastavíš jako public a potom bys k ní přistupoval 

tvojeTrida.promenna = 10;

anebo budeš mít proměnnou nastavenou jako private a pak si musíš k takové proměnné vytvořit getter a setter, jak už psal NotBeginner. To, co ty chceš udělat, je nesmysl, ale pokud bys měl danou proměnnou nastavenou jako public, pak by část tvého kódu mohla vypadat třeba následovně: 

public void run()
{
	Vlakno1 noveVlakno = new Vlakno1();
	noveVlakno.premenna = noveVlakno.premenna + 5;
}

Pokud bys nechtěl ve funkci run vytvářet nové vlákno, můžeš ho dané funkci předávat jako parametr a pak danou funkci volat s tím parametrem.

Nicméně ti doporučím naučit se základy objektového programování, máš tam docela mezery.

Nahlásit jako SPAM
IP: 195.113.207.–
Inject all the dependencies!
q
~ Anonymní uživatel
219 příspěvků
24. 2. 2015   #5
-
0
-

Tu proměnnou tam zjevně má a řeší její hodnotu!

class Vlakno1 extends Thread
{
	public volatile int premenna = 0;
 
	public void run() {
		System.out.println("vlakno startuje");
		for (int i = 0; i < 10; i++) {
			premenna += 5;
			System.out.println("set " + premenna);
			try { Thread.sleep(100); } catch(Exception e) {}
		}
		System.out.println("vlakno konci");
	}
}

... 
public static void main(String[] args)
{
	Vlakno1 v1 = new Vlakno1();
	v1.start();
	while (v1.isAlive()) {
		System.out.println("get " + v1.premenna);
		Thread.sleep(50);
	}
}
Nahlásit jako SPAM
IP: 213.211.51.–
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, 29 hostů

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ý