Wait() problem i LEGO mindstorm programmering
Hej eksperterJeg kommer med en lidt svær en, vil jeg tro. Det kan godt være problemet ikke er så svært som jeg tror det er, men sådan her ligger landet.
Jeg arbejder på et projekt i min skole, hvor jeg skal programmere en LEGO Mindstorm robot til at køre rundt på en bane. Billeder kan ses her:
Bane: http://www.evilfish.dk/other/maze.jpg
Robot: http://www.evilfish.dk/other/robot.jpg
Indtil videre har vi faktisk fået den til at lave nogle små ting, der kan hjælpe den med at navigere. Men nu til problemet:
Da den skal kunne lave nogle forskellige ting på samme ting, er Tråd programmering nødvendig. Ikke noget jeg ikke har prøvet før, men jeg er kommet til et problem jeg ikke forstår.
Jeg får en IllegalMonitorException ved en wait(), som jeg ikke får andre steder. Når jeg kigger i en FAQ for LEGO mindstorm robot programmering siger den følgende:
Q: I keep getting IllegalMonitorStateException.What is the reason for this?
A: This is standard Java behavior.When you call wait, notify, or notifyAll on an
object, you must own that object’s monitor (for example, have synchronized
access to it).
Her er koden for det pågældende sted, hvor fejlen sker.
public void run()
{
move.setPower(2);
move.rotateRight();
while(true)
{
try
{
if(lvh.getState() == LineState.BLACK)
{
Sound.beep();
while(lvh.getState() == LineState.BLACK)
{
sleep(2);
wait();
}
}
}
catch(IllegalMonitorStateException e)
{
Sound.buzz();
while(!Button.VIEW.isPressed())
{
LCD.showNumber(2009);
}
System.exit(1);
}
catch(InterruptedException e)
{
// TODO Auto-generated catch block
}
}
Det skal lige siges at Mindstorm robotten programmeres til en Java RunTime maskine som hedder LejOS. API’en til denne kan finder her: http://www.evilfish.dk/other/lejosAPI/
Nogen der har en god ide hvorfor min wait() laver den fejl den laver?
