Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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,在启动线程后获取空值_Java_Android_Multithreading - Fatal编程技术网

Java,在启动线程后获取空值

Java,在启动线程后获取空值,java,android,multithreading,Java,Android,Multithreading,我试图在我的android应用程序中,在一个与GUI无关的类中运行这段代码 Thread connection = new Thread(new Runnable() { public void run() { try { streamSource = new StreamSource(conn.getInputStream());

我试图在我的android应用程序中,在一个与GUI无关的类中运行这段代码

Thread connection = new Thread(new Runnable() {
                public void run() {
                    try {
                        streamSource = new StreamSource(conn.getInputStream());
                        writer = new CharArrayWriter();
                        StreamResult streamResult = new StreamResult(writer);
                        TransformerFactory factory = TransformerFactory.newInstance();
                        Transformer transformer = factory.newTransformer();
                        transformer.transform(streamSource, streamResult);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
              });
        connection.start();
问题是,当我调用writer时,我得到一个空值。 Writer被定义为静态全局变量以及streamSource。 我不擅长线程,这似乎是我的主要线程没有看到我的作家是创造出来的

有什么帮助吗?

您的变量编写器位于另一个类(线程)中,因此您无权访问它。 它是静态的,这就是理论上能够访问它的原因,但是它没有初始化到另一个线程

请在您需要的地方创建变量,或者“外包”在那里发生的完整操作

编辑
以下是有关Android中线程和进程的一些信息。

初始化writer对象后启动线程。如果您需要两个线程同时运行,那么简单的方法是运行while循环检查If
writer!=空
线程。在每次迭代时睡眠

您是否确定启动的线程在读取之前有时间初始化
编写器
?如何确保?我应该在启动线程之前等待吗?您是否尝试过Class.writer=new CharArrayWriter()?因此您将writer定义为静态全局并尝试在线程中初始化它?坏主意。在线程中定义。或者,如果要共享并确保该对象是线程安全的,请定义一次。