0

我在 Android java 项目中有一个主类,其中定义了所有函数。然后我有 2 个其他类扩展主类并实现Runnable.

  • 主类:所有主要功能
  • 第 2 类:我使用所有主要功能并有一个静态变量X,我在文件 2 中对其进行了修改。
  • 第 3 类:我使用所有主要功能并有一个静态变量Y,我在文件 3 中对其进行了修改。

在主类中,我启动了 2 个线程:一个用于 Class2,一个用于 Class3。

当我尝试Class2.X从主班打电话时,总是null无论如何。我已经尝试过volatile, synchronized(thread),getvalue()等,但它不起作用。

我应该怎么做才能Class2.X从主类中读取它不为空的值?

这是代码:

Thread t = new Thread(new Functionss(mRgbImage));
t.start();
Thread t2 = new Thread(new Functionss_2(mRgbImage));
t2.start();

if(boolean_variable)
{
    try {
        Thread.sleep(30000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    Bitmap final_added =addition(mRgbImage2, mRgbImage3);                 
    mImageView.setImageBitmap(final_added);

mRgbImage2并且mRgbImage3static volatile变量。

事实上,我认为这不是变量的问题,因为当我在主类中使用图像并对其进行修改,然后执行mImageView.setImageBitmap(initial_image)时,我的安卓手机仍然出现黑屏。

我在 logcat 中记录了以下内容:

Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40a34d28

如果我删除线程,我不会收到此错误。

有什么帮助吗?

4

2 回答 2

1

我怀疑您的线程从未执行赋值语句或分配不同的值或其他东西。也许放置一些日志消息或调试您的应用程序并在分配处放置一个断点会有所帮助。

如果你有类似的东西:

public class MainClass {
    Class2 class2 = new Thread(new Class2());
    class2.start();
    class2.join();
    // Class2.value will == 10 here
}

进而:

public class Class2 implements Runnable {
    public static volatile int value;
    public void run() {
       ...
       this.value = 10;
       ...
    }
}

然后在分配发生Class2后,value 更新。这显然是一个简单的例子,我怀疑Class2你的代码中的线程实际上还没有完成,但只要达到了分配,那么value 就会改变。同样,日志消息或调试器在这里会有所帮助。

最好有类似以下模式的东西:

public class Class2 implements Runnable {
    private volatile int value;
    public void run() {
       ...
       this.value = 10;
       ...
    }
    public int getValue() {
        return this.value;
    }
}

所以 then可以毫无混淆地MainClass访问该值。请注意,您仍然需要那里的关键字,因为该值是从不同的线程获取/设置的。Class2Class3volatile

希望这里有帮助。如果您使用更多详细信息编辑您的问题,我可能会提供更多帮助。

于 2012-04-09T21:49:55.953 回答
0

我正在使用 JJIL 库,结果证明

“ 哪些步骤将重现该问题?

  1. 在多个线程中使用 RgbImageJ2se.toDisplay 模拟(RgbImageJ2se 的不同实例)。

由于传递了对 Graphics 对象的静态引用,因此取决于哪个线程先执行会产生不确定的结果。"

参考:http ://code.google.com/p/jjil/issues/detail?id=27

我怀疑它与库有关,因为我用数学函数重写了代码,并且输出是正确的。它正在等待两个类完成并使用它们的输出进行进一步的计算。

希望这可以帮助其他人陷入困境。

于 2012-04-14T18:17:18.223 回答