java - Windows 已聚焦 - 忽略多线程后的焦点增益

标签 java android multithreading

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

  • 主类:所有主要函数
  • 类 2:我使用所有主函数并有一个静态变量 X,我在文件 2 中修改了该变量。
  • 类 3:我使用所有主函数并有一个静态变量 Y,我在文件 3 中修改了该变量。

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

当我尝试从主类调用Class2.X时,无论如何它总是null。我尝试过 volatilesynchronized(thread)getvalue() 等,但它不起作用。

我应该如何读取 Class2.X 的值,使其在主类中不为 null?

这是代码:

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);

mRgbImage2mRgbImage3static volatile 变量。

事实上,我认为这不是变量的问题,因为当我在主类中使用图像并修改它,然后执行mImageView.setImageBitmap(initial_image)时,我仍然得到一个我的 Android 手机黑屏。

我在 logcat 中注意到以下内容:

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

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

有什么帮助吗?

最佳答案

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

如果你有类似的东西:

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 中进行分配后, 已更新。这显然是一个简单的示例,我怀疑您的代码中的 Class2 线程实际上尚未完成,但只要完成分配,那么 value 就会 已更改。同样,日志消息或调试器在这里会有所帮助。

最好有类似以下模式的内容:

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

这样,MainClass 就可以毫无困惑地访问 Class2Class3 中的值。请注意,您仍然需要 volatile 关键字,因为该值是从不同的线程获取/设置的。

希望这里有帮助。如果您编辑问题并提供更多详细信息,我也许可以提供更多帮助。

关于java - Windows 已聚焦 - 忽略多线程后的焦点增益,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10079584/

相关文章:

ios - 让所有端点等待一个确切的端点

java - 线程在 CPU 周期和内存中的粗略 "Cost"是多少?

java - 避免在 Spring 中为 TImeline 功能创建重复项

java - 查找事件分派(dispatch)线程违规

java - 如何在静态上使用 getString() ?

android - 为 "one row"数据使用 sharedPreferences 或数据库

c++ - 哪种是产生线程的最佳方法?

java - 控制selenium中的执行速度

java - 如何在 Android 应用程序中使用 javaanpr?

android - onBackPressed() 未被执行