我正在編寫一個Java浮油遊戲,我想添加一個消息管理。應該有一個ArrayList包含所有尚未發送的消息。每2秒鐘應顯示列表中的下一個項目。Java浮油;延遲後運行命令無循環;
我的邏輯:
在更新梅索德應顯示所述第一消息。 2秒後該物品被移除。
我的問題是,只是第一個顯示,其他沒有。當我調試時,我注意到,在這2秒鐘後,計時器繼續移除第一個項目而沒有2秒的中斷。
請你幫助我找到問題或更好的邏輯。
這是我的一些編碼。
Mothode將消息放入隊列
public static void showMessage(String message){
msgHandler.addMessage(message);
}
渲染梅索德
public void render(GameContainer gameContainer, Graphics g) throws SlickException {
msgHandler.getCurrentMessage().displayMessage(g);
if(msgHandler.isTimerCompleted()){
msgHandler.next();
}
}
消息管理器類
public class MessageHandler {
private ArrayList<Message> messages;
private int duration = 2000;
private Timer timer = new Timer();
private boolean isTimerCompleted = true;
public MessageHandler() {
messages = new ArrayList<>();
}
public void next() {
isTimerCompleted = false;
timer.schedule(new TimerTask() {
@Override
public void run() {
if (messages.size() > 0) {
messages.remove(0);
}
System.out.println("test");
}
}, duration);
isTimerCompleted = true;
}
public Message getCurrentMessage() {
if (messages.size() > 0)
return messages.get(0);
return new Message("");
}
public void addMessage(String message, int x, int y) {
messages.add(new Message(message, x, y));
}
public void addMessage(String message) {
messages.add(new Message(message));
}
}
我想你明白這一點錯誤。每次函數被調用時都應該有2秒的延遲,然後從列表中刪除消息。 我的問題是,第一次定時器完成後,run方法中的所有內容都會不斷執行。它正在循環。但我希望運行方法不是無限循環。 – Lorenz
嗨,我已經更新了我的答案,要更具體些,請讓我知道你的想法。 –
非常感謝!它已經工作了! 祝您有美好的一天。 – Lorenz