Java,在启动线程后获取空值
我试图在我的android应用程序中,在一个与GUI无关的类中运行这段代码Java,在启动线程后获取空值,java,android,multithreading,Java,Android,Multithreading,我试图在我的android应用程序中,在一个与GUI无关的类中运行这段代码 Thread connection = new Thread(new Runnable() { public void run() { try { streamSource = new StreamSource(conn.getInputStream());
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定义为静态全局并尝试在线程中初始化它?坏主意。在线程中定义。或者,如果要共享并确保该对象是线程安全的,请定义一次。