In der Klasse CameraMessageFrameWorker
möchte ich einen neuen Thread erstellen, um einige Nachrichten zu behandeln. Der Erhalter dieser Klasse bekommt die PartialMessageFrame
. Ich kopiere diese PartialMessageFrame
auf die neue private
Variable messageFrame
. Mit dieser Variable möchte ich den neuen Thread erstellen, aber wenn ich dies tun möchte, bekomme ich eine java.lang.IndexOutOfBoundsException
, weil diese Variable null
ist.Erzeugt neuen Thread mit Parametern
Ich habe überprüft, ob die Variable messageFrame
im Konstruktor die Daten für die aufrufende Funktion erhalten.
Wie kann ich einige Parameter in diesen Thread eingeben? Was ist falsch an diesem Code?
CameraMessageFrameWorker.java
public class CameraMessageFrameWorker implements MessageFrameWorker {
private static final Logger LOGGER = LoggerFactory.getLogger(CameraMessageFrameWorker.class);
private final PartialMessageFrame messageFrame;
private final SerialPort serialPort;
public CameraMessageFrameWorker(
final PartialMessageFrame p,
final SerialPort serialPort) {
messageFrame = p;
this.serialPort = serialPort;
}
@Override
public void run() {
switch (messageFrame.getMessageType()) {
case FCT: {
handleFunction();
break;
}
case REQ: {
handleRequest();
break;
}
default: {
LOGGER.warn("unhandled message type");
break;
}
}
}
Schnittstelle: MessageFramewoker.java
public interface MessageFrameWorker extends Runnable {
}
Fehlermeldung:
Exception in thread "pool-1-thread-1" java.lang.IndexOutOfBoundsException: Index: 9, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at com.scape.cx.service.draeger.polaris.simulator.PartialMessageFrame.getMessageTypeAsInt(PartialMessageFrame.java:56)
at com.scape.cx.service.draeger.polaris.simulator.PartialMessageFrame.getMessageType(PartialMessageFrame.java:80)
at com.scape.cx.service.draeger.polaris.simulator.CameraMessageFrameWorker.run(CameraMessageFrameWorker.java:39)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Eintrag Kommentare zu den entsprechenden Code und Fehlermeldung Details zu machen. – Oleg