gpt4 book ai didi

Java - 两个线程不同步

转载 作者:行者123 更新时间:2023-12-02 05:11:57 27 4
gpt4 key购买 nike

我现在正在编写一个简单的自上而下的射击游戏。玩家可以按住鼠标连续射击。由于没有本地方法来检查鼠标按钮是否被按下,我实现了这个解决方案:https://stackoverflow.com/a/6828990/3716866

这工作得很好。但问题是我将每个子弹对象和每个游戏对象(敌人、玩家、桶等)放在一个链接列表中(两个列表,一个用于对象,一个用于子弹)。当您发射子弹时,它会被添加到 LinkedList 中。游戏循环的每次运行都会检查整个列表是否存在碰撞。发射大约 2 枪后,游戏因空指针异常而崩溃。我认为问题是,由于我使用第二个线程来实现鼠标按钮按住,因此在另一个线程中检查列表时会创建一个项目符号对象。由于我正在检查列表,当大小发生改变时,它正在检查列表,它崩溃了。但这只是我的理论。有人知道如何让它们保持同步吗?

如果您需要更多代码等,请告诉我,我将上传它。我只是不确定我应该发布什么。因此,在我发送垃圾邮件之前,我想等待您的反馈。

异常(exception):

Exception in thread "Thread-2" java.lang.NullPointerException
at shooter.main.Handler.checkForCollision(Handler.java:50)
at shooter.main.Handler.tick(Handler.java:41)
at shooter.main.Game.tick(Game.java:189)
at shooter.main.Game.run(Game.java:290)
at java.lang.Thread.run(Unknown Source)

处理程序类,为每个对象运行所有勾选和更新方法,包括碰撞:

http://pastebin.com/mb206jug

实现另一个线程的我的 MouseListener 类:

http://pastebin.com/LfGWa5se

我的主游戏类,尽管我认为它对于这个问题不是非常重要:

http://pastebin.com/kW3UmZuD

我的抽象 GameObject 类:

http://pastebin.com/HbsdCUch

游戏对象示例:

http://pastebin.com/vXCWZwtf

我的抽象弹药类:

http://pastebin.com/dBnyXwgM

项目符号示例:

http://pastebin.com/XapmnsBv

拍摄方法是怎样的:

public void shoot() {
//play sound effect
// fire bullet
game.getHandler().addBullet(new Bullet9mm(game.getHandler().getPlayer().getX(), game.getHandler().getPlayer().getY(), game.getBulletImageManager(), game));
// remove 1 bullet from magazine
game.getHandler().getPlayer().getCurWeapon().setMagAmmo(-1);
}

我希望我提供了所有必要的信息。如果您还需要我的代码中的其他内容,请告诉我。

最佳答案

LinkedList 删除将所有后续元素向左移动(从索引中减去 1)。返回从列表中删除的元素。因此,如果您要删除它,则可能没有您可以访问的项目符号或播放器。您只需突出显示您的类和方法签名,我自己或其他人可以帮助您更好地设计它。

关于Java - 两个线程不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27261610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com