Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Windows已聚焦-忽略多个线程后的聚焦增益_Java_Android_Multithreading - Fatal编程技术网

Java Windows已聚焦-忽略多个线程后的聚焦增益

Java Windows已聚焦-忽略多个线程后的聚焦增益,java,android,multithreading,Java,Android,Multithreading,我在Android java项目中有一个主类,其中定义了所有函数。然后我还有另外两个类,它们扩展了主类并实现了Runnable 主类:所有主要函数 第2类:我使用所有的主函数,并且有一个静态变量X,我在文件2中对其进行了修改 类别3:我使用所有的主函数,并且有一个静态变量Y,我在文件3中修改了它 在主类中,我启动了两个线程:一个用于类2,一个用于类3 当我试图从主类调用Class2.X时,无论发生什么情况,它总是null。我尝试了volatile,synchronized(thread),g

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

  • 主类:所有主要函数
  • 第2类:我使用所有的主函数,并且有一个静态变量
    X
    ,我在文件2中对其进行了修改
  • 类别3:我使用所有的主函数,并且有一个静态变量
    Y
    ,我在文件3中修改了它
在主类中,我启动了两个线程:一个用于类2,一个用于类3

当我试图从主类调用
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
mRgbImage3
static volatile
变量

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

我在日志中注意到以下几点:

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
线程在您的代码中没有实际完成,但只要已达到赋值,那么
值将发生更改。同样,日志消息或调试器在这里也会有所帮助

最好采用以下模式:

public class Class2 implements Runnable {
    private volatile int value;
    public void run() {
       ...
       this.value = 10;
       ...
    }
    public int getValue() {
        return this.value;
    }
}
因此,
MainClass
可以从
Class2
Class3
访问值,而不会产生混淆。注意,这里仍然需要
volatile
关键字,因为该值是从不同的线程获取/设置的


希望这里有帮助。如果你用更多的细节编辑你的问题,我可能会提供更多的帮助。

我在使用JJIL库,结果是

" 什么步骤会重现问题

  • 使用RgbImageJ2se.toDisplay在multiiple threads simulational(RgbImageJ2se的不同实例)中
  • 由于对传递的图形对象的静态引用,根据首先执行的线程,将有不确定的结果。 "

    参考:

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


    希望这能帮助其他陷入困境的人。

    您能给我们看一些代码吗?你能给出你对这些字段的定义吗?当我认为你的意思是“类”时,你使用了“文件”这个词,对吗?是的,每个文件都定义了一个类。
    boolean\u变量
    be
    false
    ?应该是一个while循环还是什么的<代码>while(!boolean_variable){sleep(1000);}
    或其他什么?这可能是Android渲染错误,而不是线程错误。为什么不放一条日志消息来验证映像是否已更改。我认为你的问题是它没有重新渲染图像。布尔变量是真的,我认为它与此警告有关,但仍然无法确定是如何发布的嘿,格雷,我发布了代码,它可能不是静态变量的问题,你有什么想法吗?抱歉@Adroidist,我没有想法。我不认为你最初的问题是问题所在。您是否可以在显示图像的位置调试代码,或者添加日志消息以查看是否已更新?