webForumDet fria alternativet

Mitt prog somnar inte

Java

6 svar · 432 visningar · startad av clarkbones

Medlem sedan feb. 20013 023 inlägg
Frågan#1

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:<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");
}

}

------------------
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]

Medlem sedan juni 200010 432 inlägg
#2

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!

Medlem sedan sep. 2001961 inlägg
#3

Normalt gör man såhär:

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">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> }

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:<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

}

Waiter.java

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">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

Caller.java
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">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

/Lime (gör nästan en Ernst...)

------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk

Medlem sedan juni 200010 432 inlägg
#4

/Lime (gör nästan en Ernst...)

Nästan...? :p ;)

------------------
Ancilla, face mea laganum!

Medlem sedan sep. 2001961 inlägg
#5

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

Medlem sedan juni 200010 432 inlägg
#6

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]

Medlem sedan sep. 2001961 inlägg
#7

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

260 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)