Java:
while (t1.bytes.size() > 0 && t2.bytes.size() > 0) {
iden=true;
for(int i=0;i<t1.bytes.get(0).length;i++){
if(t1.bytes.get(0)[i]!=t2.bytes.get(0)[i])
iden=false;
}
if (iden) {
counter -= t1.bytes.get(0).length;
t1.lock.lock();
t1.bytes.remove(0);
t1.lock.unlock();
t2.lock.lock();
t2.bytes.remove(0);
t2.lock.unlock();
} else {
t1.interrupt();
t2.interrupt();
System.out.println("Dateien unterscheiden sich beim "
+ (size - counter + 1) + ". Array");
return false;
}
}
Das ist ein Teil des Programms. Der Teil der mir Probleme bereitet. Manchmal geht alles gut, manchmal tritt in der Zeile: "if(t1.bytes.get(0)!=t2.bytes.get(0))" eine Exception in thread "Thread-0" java.lang.NullPointerException auf. Ich kann aber nicht verstehen wieso. Zwar fügen die Threads t1 und t2 den ArrayListen t1.bytes und t2.bytes über add Elemente zu, doch löscht alleine diese Schleife hier Elemente raus. Beim Löschen (kann man ja hier sehen), aber auch beim Adden wird gelockt. Bei den Leseoperationen nicht. Die While-Schleife fragt ganz oben ab, ob die beiden Listen noch Elemente haben. Wie kann es dann manchmal später beim Zugriff zu einer NullPointerException kommen?
Zuletzt bearbeitet: