Java 使用参数创建新线程
在类Java 使用参数创建新线程,java,multithreading,threadpool,java-threads,Java,Multithreading,Threadpool,Java Threads,在类cameressageframeworker中,我想创建一个新线程来处理一些消息。这些类的构造函数获取PartialMessageFrame。我将这些PartialMessageFrame复制到新的private变量messageFrame。使用此变量,我想创建新线程,但当我想这样做时,我会得到一个java.lang.IndexOutOfBoundsException,因为此变量是null 我已经检查了构造函数中的messageFrame变量是否获得了调用函数的数据 如何将一些参数放入该线程
cameressageframeworker
中,我想创建一个新线程来处理一些消息。这些类的构造函数获取PartialMessageFrame
。我将这些PartialMessageFrame
复制到新的private
变量messageFrame
。使用此变量,我想创建新线程,但当我想这样做时,我会得到一个java.lang.IndexOutOfBoundsException
,因为此变量是null
我已经检查了构造函数中的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)
为了解决这个问题,我必须先从这个
messageFrame
做一个深度拷贝,然后再把它放到这个cameressageframeworker
中
请参见此处,从ArrayList创建深度副本
发布相关代码和错误消息详细信息。