-1

In the class CameraMessageFrameWorker i want to create a new Thread to handle some messages. The consructor of these class get the PartialMessageFrame. I copy these PartialMessageFrame to the new private Variable messageFrame. With this variable i want to create the new Thread but when i want to do this i get an java.lang.IndexOutOfBoundsException because this variable is null.

I have checked if the messageFrame variable in the contructor get the data for the calling function.

How can i put some parameters into this thread? What is wrong on this 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;
      }
    }
  }

Interface: MessageFramewoker.java

public interface MessageFrameWorker extends Runnable {
}

Error message:

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)
Dave
  • 19
  • 5

1 Answers1

0

To solve this problem i have to make a deep copy from this messageFrame before i put it in this CameraMessageFrameWorker.

See here to make a deep copy from a ArrayList How to clone ArrayList and also clone its contents?

Dave
  • 19
  • 5