【发布时间】:2014-11-07 21:00:47
【问题描述】:
我正在尝试在 java gui 中进行文本冒险。我刚刚开始这个项目,我正试图让游戏意识到玩家何时键入“获取”+该项目。我希望它从它所在的当前 ArrayList 中取出项目并将其添加到我制作的库存屏幕中。目前一切正常,除了当我输入一个不同的命令,比如“look”。它应该显示的只是房间描述,但它会显示描述并拿起物品并将其放入库存屏幕。然后我得到这个错误。
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at Gamegui.processCommands(Gamegui.java:327)
at Gamegui.playerInputKeyPressed(Gamegui.java:359)
at Gamegui.access$200(Gamegui.java:14)
at Gamegui$3.keyPressed(Gamegui.java:171)
at java.awt.Component.processKeyEvent(Component.java:6483)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2829)
at java.awt.Component.processEvent(Component.java:6302)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
at java.awt.Component.dispatchEventImpl(Component.java:4752)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
BUILD SUCCESSFUL (total time: 10 seconds)
这是我的相关代码。
进程命令
public void processCommands(String input)
{
ArrayList<String> items = currentRoom.getItems();
if(input.equals("look"))
{
gameScreen.append("\n" + currentRoom.getDescription());
}
for(String item : items)
{
if(input.equals("get " + item));
{
items.remove(item);
gameScreen.append("\nYou pick up the " + item);
invScreen.append("\n" + item);
playerInput.setText("");
}
}
}
playerInputKeyPressed
private void playerInputKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == evt.VK_ENTER)
{
getInput();
if(validCommands(inputText))
{
processCommands(inputText);
}
else
{
gameScreen.append("\nI don't Understand");
}
playerInput.setText("");
try
{
JScrollBar sb = gameScreenPlace.getVerticalScrollBar();
sb.setValue(sb.getMaximum());
}
catch(java.lang.NullPointerException err)
{
}
}
}
有人可以帮我解决这个问题吗?
【问题讨论】:
-
好的,很明显的问题 - 哪一行是
Gamegui.java:327,异常消息告诉您的那一行是导致您的问题的原因? -
你删除迭代元素内的项目;
-
是的,使用 Iterator 来执行此操作。
标签: java