Stránka 1 z 1
java spuštění metody při nečinnosti
Napsal: úte 19. dub 2011, 22:46
od Václav Sedlář
Dobrý den, dělám jeden program v javě (používám graf.rozhraní,ne consoli...)....vše funguje,ale potřeboval bych nějak udělat, že když běží ten program a třeba 5 minut se nic neděje s PC (žádný pohyb s myší apod...), tak aby se spustila v tom programu nějaká metoda....je to vůbec možné nějak udělat?a jak?
Děkuji za pomoc...
P.S.: Program totiž dělám pro mamku a v tom programu mám tlačítko na "zamknutí" urč. fcí. toho programu, jenže mamka na to zapomíná a někdy odejde od PC a nechá ho odemčen...a k tomu potřebuju tu fci. aby udělala po x minutách nečinnosti to, co se stane při klepnutí na tlačítko pro uzamčení programu...
Re: java spuštění metody při nečinnosti
Napsal: stř 27. dub 2011, 10:55
od Stary88
Nevim jestli je to jeste aktualni, ale reseni podle me neni slozite. Jestli to ma byt Desktopova aplikace jak jsem pochopil tak bych to resil asi takhle:
Na zacatek musi aplikace implementova tyto rozhrani:
...
...
Pri startu aplikace pridam na mainPanel Listenera:
...
...
pote jiz jen implementuju vsechny metody a vylam v nich jednu metodu kde se bude pocitat cas:
Kód: Vybrat vše
public void mouseClicked(MouseEvent e) {
lastAction();
}
public void mousePressed(MouseEvent e) {
lastAction();
}
public void mouseReleased(MouseEvent e) {
lastAction();
}
public void mouseEntered(MouseEvent e) {
lastAction();
}
public void mouseExited(MouseEvent e) {
lastAction();
}
public void lastAction() {
if (!lock) {
lock = true;
cal = Calendar.getInstance();
timeStart = cal.getTimeInMillis();
Thread t = new Thread(this);
t.start();
}
}
public void run() {
while (true) {
try {
cal = Calendar.getInstance();
timeEnd = cal.getTimeInMillis();
if (timeEnd > timeStart + 5000) {
zamkni();
lock = false;
break;
}
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(DesktopApplication1View.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
private void zamkni() {
System.out.println("Zamknul jsem");
}
Po necinosti po dobu ktera je v podmince se vyvola metoda zamkni tod vse

Re: java spuštění metody při nečinnosti
Napsal: stř 27. dub 2011, 16:24
od OndraSter
while (true) {
....
Thread.sleep(100);
?!
Re: java spuštění metody při nečinnosti
Napsal: stř 27. dub 2011, 21:30
od Stary88
Uznavam ze to asi neni uplne idealni, ale myslim ze zde zcela dostacujici. Vlakno se na chvili uspi, aby rezije cyklu while klesla co nejmin. Zalezi jak velky casovy usek se bude merit pokud pujde o minuty muzese se vklakno klidne uspat i na pul minuty. Ja osobne v tom nevidim problem...
Re: java spuštění metody při nečinnosti
Napsal: stř 27. dub 2011, 22:16
od OndraSter
Co třeba Timer v AWT a při každém eventu myši/klávesnice/... ho vyresetovat na 0?
(Javu neznám, takhle bych to řešil já v C#.)
A pak ještě system-wide hook, ale ten nevím, jestli vůbec v Javě jde, popř jestli obsahuje něco jako InterOP helpera jako .NET.
Re: java spuštění metody při nečinnosti
Napsal: stř 27. dub 2011, 22:20
od Stary88
Druha moznost ktera me napadla byl prave Timer, ale zadany problem bych resil proste pomoci vlakna a whilu. Urcite je vice moznosti jak si s tim poradit a ja zvolil tuto a stojim si za ni

Re: java spuštění metody při nečinnosti
Napsal: stř 27. dub 2011, 22:42
od OndraSter
Já bych stál za timerem - už jen proto, že by měl (pokud není Java VM implementován ještě hůře, než vypadá) používat systémový časovač a během čekání využívat přesně 0% procesoru

. Cokoliv s while(true) a Thread.Sleep() bude něco žrát a ubírat režiji ostatním aplikacím.
Re: java spuštění metody při nečinnosti
Napsal: čtv 28. dub 2011, 16:21
od arxeiss
Nechci se hádat, ale myslím Thread.Sleep() bude taky využívat systémové časovače. Přece jenom o to, který proces apod... příjde na řadu, o tom rozhoduje systém, proto myslím, že využívá časovače.
Jina while(true) ani náhodou, viz výše
Re: java spuštění metody při nečinnosti
Napsal: čtv 28. dub 2011, 17:27
od OndraSter
Thread.Sleep ano, ale ta kontrola kolem ve while(true) bude požírat CPU

Re: java spuštění metody při nečinnosti
Napsal: sob 30. dub 2011, 19:52
od Václav Sedlář
jů díky za odpovědi...hned jak se k tomu dostanu tak budu zkoušet...