我有一个Java线程,它在一个while循环常量中运行寻路算法。然后,每隔一段时间我想从线程中检索最新路径。但是,我不确定如何执行此操作,并认为我可能做错了。 我的线程包含以下代码:
public class BotThread extends Thread {
Bot bot;
AStar pathFinder;
Player targetPlayer;
public List<boolean[]> plan;
public BotThread(Bot bot) {
this.bot = bot;
this.plan = new ArrayList<>();
pathFinder = new AStar(bot, bot.getLevelHandler());
}
public void run() {
while (true) {
System.out.println("THREAD RUNNING");
targetPlayer = bot.targetPlayer;
plan = pathFinder.optimise(targetPlayer);
}
}
public boolean[] getNextAction() {
return plan.remove(0);
}
}
然后我创建一个BotThread对象,并调用start()。然后,当我在线程上调用getNextAction()时,似乎收到了一个空指针。这是因为在主循环中时,我无法在线程上调用另一个方法吗?我应该如何正确执行此操作?
答案 0 :(得分:0)
这是因为您没有给线程足够的时间来初始化计划Arraylist。您需要为线程增加睡眠时间。从main调用BotThread类时会发生以下情况:
int num_threads = 8;
BotThread myt[] = new BotThread[num_threads];
for (int i = 0; i < num_threads; ++i) {
myt[i] = new BotThread();
myt[i].start();
Thread.sleep(1000);
myt[i].getNextAction();
}