Blacklotus
Nieuwe gebruiker
- Lid geworden
- 4 nov 2009
- Berichten
- 2
Dit is een stukje code uit mijn main
[JS]//Netwerken starten en het volgende netwerk toekennen.
for(int i=0;i<aantalNetwerken;i++)
{
//Als we het laatste netwerk aangemaken, moet er geen volgend netwerk toegekend worden
if (i == (aantalNetwerken - 1))
{
netwerken.setNextNetwerk(null);
netwerken.start();
}
//Anders wel een volgende netwerk toekennen.
else // regel 44
{
netwerken.setNextNetwerk(netwerken[i+1]); // regel 46
netwerken.start();
break;
}
}[/JS]
Het probleem zit erin dat ik een token wil doorgeven door netwerken. Ik laat daarvoor elk netwerk een volgende netwerk herkennen, zodat ik het kan doorgeven van de ene zijn postvak uit naar de volgende zijn postvak in.
De errors die gegeven worden zijn de volgende:
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.NullPointerException
at Main.main(Main.java:44)
java.lang.NullPointerException
at Main.main(Main.java:44)
java.lang.NullPointerException
at Main.main(Main.java:45)
Mijn run voor de threads ziet er als volgt uit:
[JS] public void run()
{
while (!einde)
{
try
{
//Kijken of het token van postvak in naar postvak uit kan gaan.
if (in != null && out == null)
{
geefTokenAanOut();
}
//Als het voorgaande niet van toepassing is, dan kijken of het token aan het volgende netwerk doorgegeven kan worden.
else if (in == null && out != null)
{
if (next_netwerk == null)
{
if (teller < (aantalTokens - 1))
{
out.getTijd();
System.out.println("Token " + out.getNr() + " heeft het laatste netwerk bereikt (Thread " + this.nr + ")");
out = null;
teller++;
}
else
{
out.getTijd();
System.out.println("Token " + out.getNr() + " heeft het laatste netwerk bereikt (netwerk " + this.nr + ")");
System.out.println("Alle tokens hebben de laatste thread bereikt, daarom stoppen we alle netwerken!");
einde = true;
}
}
else if (next_netwerk.in == null && next_netwerk.out == null)
{
geefTokenDoor();
}
}
else
{
slaap();
}
}
catch (Exception e)
{
System.out.println("Fout");
}
}
} [/JS]
en slaap zo:
[JS]public int slaap()
{
int s = generator.nextInt();
s = Math.abs(s)/1000000;
try
{
System.out.println("Netwerk "+ this.nr + " gaat " + s + " ms slapen.");
this.sleep(s);
System.out.println("Netwerk "+ this.nr + " is wakker.");
}
catch (Exception e)
{
System.out.println("Er is een fout opgetreden in de slaapfunctie!");
}
return s;
}
[/JS]
Kunnen jullie mij misschien helpen waar het probleem zit, want ik heb al gekeken of ik een bepaalde thread niet 2 keer start, maar dat is niet het geval denk ik, als jullie meer code nodig hebben dan vraag het maar.
met vriendelijke groetjes
[JS]//Netwerken starten en het volgende netwerk toekennen.
for(int i=0;i<aantalNetwerken;i++)
{
//Als we het laatste netwerk aangemaken, moet er geen volgend netwerk toegekend worden
if (i == (aantalNetwerken - 1))
{
netwerken.setNextNetwerk(null);
netwerken.start();
}
//Anders wel een volgende netwerk toekennen.
else // regel 44
{
netwerken.setNextNetwerk(netwerken[i+1]); // regel 46
netwerken.start();
break;
}
}[/JS]
Het probleem zit erin dat ik een token wil doorgeven door netwerken. Ik laat daarvoor elk netwerk een volgende netwerk herkennen, zodat ik het kan doorgeven van de ene zijn postvak uit naar de volgende zijn postvak in.
De errors die gegeven worden zijn de volgende:
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:595)
at Main.main(Main.java:46)
java.lang.NullPointerException
at Main.main(Main.java:44)
java.lang.NullPointerException
at Main.main(Main.java:44)
java.lang.NullPointerException
at Main.main(Main.java:45)
Mijn run voor de threads ziet er als volgt uit:
[JS] public void run()
{
while (!einde)
{
try
{
//Kijken of het token van postvak in naar postvak uit kan gaan.
if (in != null && out == null)
{
geefTokenAanOut();
}
//Als het voorgaande niet van toepassing is, dan kijken of het token aan het volgende netwerk doorgegeven kan worden.
else if (in == null && out != null)
{
if (next_netwerk == null)
{
if (teller < (aantalTokens - 1))
{
out.getTijd();
System.out.println("Token " + out.getNr() + " heeft het laatste netwerk bereikt (Thread " + this.nr + ")");
out = null;
teller++;
}
else
{
out.getTijd();
System.out.println("Token " + out.getNr() + " heeft het laatste netwerk bereikt (netwerk " + this.nr + ")");
System.out.println("Alle tokens hebben de laatste thread bereikt, daarom stoppen we alle netwerken!");
einde = true;
}
}
else if (next_netwerk.in == null && next_netwerk.out == null)
{
geefTokenDoor();
}
}
else
{
slaap();
}
}
catch (Exception e)
{
System.out.println("Fout");
}
}
} [/JS]
en slaap zo:
[JS]public int slaap()
{
int s = generator.nextInt();
s = Math.abs(s)/1000000;
try
{
System.out.println("Netwerk "+ this.nr + " gaat " + s + " ms slapen.");
this.sleep(s);
System.out.println("Netwerk "+ this.nr + " is wakker.");
}
catch (Exception e)
{
System.out.println("Er is een fout opgetreden in de slaapfunctie!");
}
return s;
}
[/JS]
Kunnen jullie mij misschien helpen waar het probleem zit, want ik heb al gekeken of ik een bepaalde thread niet 2 keer start, maar dat is niet het geval denk ik, als jullie meer code nodig hebben dan vraag het maar.
met vriendelijke groetjes
Laatst bewerkt: