gpt4 book ai didi

java - 用 Java 制作游戏时的线程问题

转载 作者:行者123 更新时间:2023-12-01 12:28:31 25 4
gpt4 key购买 nike

我正在用 Java 做一个贪吃蛇游戏。我有基本的功能,但我想在单击按钮时暂停游戏。但我遇到的问题是,当我单击此按钮时,游戏暂停,但当我再次单击时,游戏无法识别控件。我有一个名为 Init 的方法,在此我初始化线程“Hilo”。我尝试创建第二个线程,在其中为按钮添加一个 actionPerformed ,但问题仍然存在,现在我更困惑了。这是我的代码:

Thread hilo; //I declared the thread
String state=""; //It is for control de state (paused or no)

Runnable hiloFor = new Runnable()
{
public void run()
{
Thread actual = Thread.currentThread();
synchronized(actual)
{
do
{
//Game instructions (there are a lot of them)
if(state.equals("paused"))
{
actual.wait();
}

}while(!option.equals("Exit"));
}
}
};


//This is my action performed where I control if it is paused
public void actionPerformed(ActionEvent e)
{
if ( e.getSource() == btnPause )
{

if(state.equals("paused"))
{
cont(); //method for reactive the thread
state="";
}else if(state.equals(""))
{
state="paused";
}
}

}

如果有人能帮助我,我会很高兴,这对我来说变得很困难。

最佳答案

要在 wait() 中重新激活线程,您必须在同一对象上调用 notify()(或更好的 notifyAll())。

您的代码看起来像是您希望暂停调用 wait() 的线程。不是这种情况。 wait() 将始终暂停进行调用的线程,而不是目标对象。您可以将任何对象用于 wait()/notifyAll() 信号,通信双方必须使用相同的对象。

此页面有一些很好的解释:http://javamex.com/tutorials/synchronization_wait_notify.shtml

关于java - 用 Java 制作游戏时的线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132450/

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