Java 如何从另一个线程更改主线程中的变量?

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; } } 在这个类的构造函数中,我在主线程

下面是我的run()函数:

@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实例(看起来您没有这样做),否则您的线程将访问同一个实例。在线程之间共享变量非常容易,这就是为什么必须对共享变量使用互斥体的原因。如果您发布更多代码,可能会有所帮助。