클래스 CameraMessageFrameWorker
에서 일부 메시지를 처리 할 새 스레드를 만들고 싶습니다. 이 클래스의 컨스트럭터는 PartialMessageFrame
입니다. 이 PartialMessageFrame
을 새로운 private
변수 messageFrame
에 복사합니다. 이 변수를 사용하여 새 스레드를 만들고 싶지만이 변수가 null
이므로 java.lang.IndexOutOfBoundsException
을 얻고 싶습니다.매개 변수가있는 새 스레드를 만듭니다.
컨스트럭터의 messageFrame
변수가 호출하는 함수의 데이터를 가져 왔는지 확인했습니다.
이 스레드에 매개 변수를 넣을 수 있습니까? 이 코드에서 잘못된 점은 무엇입니까?
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;
}
}
}
인터페이스 : MessageFramewoker.java
public interface MessageFrameWorker extends Runnable {
}
오류 메시지 :
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)
포스트에서 관련 코드 및 오류 메시지 세부 사항을 깊은 복사본을 만들려면 여기를 참조하십시오. – Oleg