View Full Version : Mitt prog somnar inte
clarkbones
2001-11-15, 01:17
Hej! Håller på med en enkel javaövning. Mitt program ska vara inaktivt några sekunder. Felmeddelande:
D:\Berakning.java:13: cannot resolve symbol
symbol : method sleep (int)
location: class Berakning
sleep(i);
^
1 error
Tool completed with exit code 1
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:[/kod]<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
class Berakning
{ public static void main(String[]arguments)
{
kalle();
}
public static void kalle()
{
int i=3000;
System.out.println("lalale");
sleep(i);
System.out.println("lars");
}
}
[/kod]
------------------
Spango om handikappanpassning av site: Får man den att funka i Lynx betyder det att man inte runkar loss för mycket i grafiska orgier, vilket blinda/gravt synskadade brukar ha svårt att ta till sig.
[Redigerat av clarkbones den 15 nov 2001]
Det finns inget inbyggt objekt sleep() i Java, däremot i form av en metod till "Thread"!
Du kan skapa en tråd (Thread t = new Thread()) och använd t.sleep(_millisec_) i run() - metoden. Kolla i dokumentationen hur du ska göra!
Annars får du kanske skapa en egen sleep() - metod genom att t.ex hämta tiden/räkna upp/jämföra med givet värde.
------------------
Ancilla, face mea laganum!
Normalt gör man såhär:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:[/kod]<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
try{
Thread.currentThred.sleep(<time in millis> );
}
catch(InterruptedException iex) { <some errorhandling if needed> }
[/kod]
Det är vist att göra en "hjälpklass" som har denna funktion om man måste sova trådar väldigt länge.
Lite trix. Ibland vill man låta en tråd vänta på att någon annan tråd skall göra något färdigt.
Då kan man använda funktionen Object.wait().
I det här exemplet så är det lite konstuerat... men jag tror ni fattar iden.
WaitEx.java (main)
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:[/kod]<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
class WaitEx {
public static void main(String[] args) {
Waiter w = new Waiter();
w.start();
Caller c = new Caller(w);
c.notifyWaiter();
} // main
}
[/kod]
Waiter.java
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:[/kod]<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
public class Waiter extends Thread {
boolean keeprunning = true;
public Waiter (){
System.out.println("Waiter created");
}
public synchronized void alarmbell(){
notify();
}
private synchronized void waitForNotify(){
System.out.println("Waiter is waiting");
try{
wait();
}
catch(Exception e) {e.printStackTrace();}
System.out.println("Waiter notified");
keeprunning=false;
}
public void run(){
System.out.println("Thread:"+this.getName());
while(keeprunning){
waitForNotify();
}
}
}// Waiter
[/kod]
Caller.java
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:[/kod]<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
public class Caller {
Waiter waiter;
public Caller (Waiter w){
waiter = w;
System.out.println("Caller created");
}
public void notifyWaiter() {
try{
Thread.currentThread().sleep(10*1000);
}
catch(Exception e){}
System.out.println("Notifying...");
waiter.alarmbell();
}
}// Caller
[/kod]
/Lime (gör nästan en Ernst...)
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
/Lime (gör nästan en Ernst...)
Nästan...? :p ;)
------------------
Ancilla, face mea laganum!
Ja, nästan. Ibland så används Thread.sleep() lite vårdslöst. Man låter en tråd sova en stund för att sedan kolla om något som man väntar på finns. Om det inte finns så somnar man om i tråden och så håller man på så tills resurserna som man väntar på finns.
Då är wait/notify bättre ur effektivitetssynpunkt.
Man kan också använda sig av samordningsobjekt som man gör notify på.
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
Till skillnad från Ernsts numera ökända självutnämna skola, gav detta något... ! Bra med dyl tips, Tack Lime ;)
------------------
Ancilla, face mea laganum!
[Redigerat av PeW den 15 nov 2001]
Tack. Bara för att göra lite reklam... (vilket egentligen är förbjudet på sådan här forum) så håller jag och en arbetskamrat på med att sätta ihop en kurs i "Effektiv Javaprogrammering".
Skulle det vara en intressant kurs? Har ni tur så lägger jag ut diverse godbitar. ;-)
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
vBulletin® v3.8.6, Copyright ©2000-2013, Jelsoft Enterprises Ltd.