Java 如何从另一个线程更改主线程中的变量?
下面是我的run()函数:Java 如何从另一个线程更改主线程中的变量?,java,multithreading,variables,libgdx,Java,Multithreading,Variables,Libgdx,下面是我的run()函数: @Override public void run() { while (true) { long elapsed = TimeUtils.nanoTime() - startTime; Texture currentFrame = connectedAnim.getFrame(elapsed); textureToApplyTo = currentFrame; } } 在这个类的构造函数中,我在主线程
@Override
public void run() {
while (true) {
long elapsed = TimeUtils.nanoTime() - startTime;
Texture currentFrame = connectedAnim.getFrame(elapsed);
textureToApplyTo = currentFrame;
}
}
在这个类的构造函数中,我在主线程中将
textureToApplyTo
设置为一个纹理变量。问题是,当我将run()函数中的textureToApplyTo
设置为currentFrame
时,它只会在我设置它的类中更改它。我想问题是我在这个类中以及在主类中创建变量textureToApplyTo
,但我不知道我还能怎么做。。。我需要一种方法来将主类中的textureToApplyTo更改为变量。您应该将该变量设置为全局变量,因此在声明该类时,您会遇到如下情况:
public class yourClass
{
private textureToApplyTo;
public setTexture(Frame frame)
{
textureToApplyTo = frame;
}
}
完成此操作后,可以在已有的run()
方法中调用此方法
@Override
public void run() {
while (true) {
long elapsed = TimeUtils.nanoTime() - startTime;
Texture currentFrame = connectedAnim.getFrame(elapsed);
yourClass.setTexture(currentFrame);
}
}
在textureToApplyTo声明中添加易失性键。像这样
public static volatile Texture textureToApplyTo;
它必须定义为一个字段,因为textureToApplyTo
在run
方法中根本没有定义。他说他在main和run中声明了它两次。所以我所说的仍然是一个有效的答案,如果他正在创建两个变量,这两个变量看起来都是局部变量,那么他需要通过创建一个变量来解决它,一个全局变量。你能提供更多的代码吗?你能用回电吗?我想你的问题可能在别的地方。除非您正在线程中创建一个单独的textureToApplyTo实例(看起来您没有这样做),否则您的线程将访问同一个实例。在线程之间共享变量非常容易,这就是为什么必须对共享变量使用互斥体的原因。如果您发布更多代码,可能会有所帮助。