2017-11-29 4 views
-1

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) 
+0

Eintrag Kommentare zu den entsprechenden Code und Fehlermeldung Details zu machen. – Oleg

Antwort

Verwandte Themen