gpt4 book ai didi

java - 为什么创建从工作线程实现可运行的类的对象会抛出异常?

转载 作者:行者123 更新时间:2023-12-01 13:17:15 26 4
gpt4 key购买 nike

我有两个类:

MainActivity.java
ClientThread.java

ClientThread.java 看起来像这样:

//
// client thread class
//
public class ClientThread implements Runnable
{
View _V;

public ClientThread(Context ctx)
{
Log.d("", "Step 1...");
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Log.d("", "Step 2...");
_V = inflater.inflate(R.layout.activity_main, null);
Log.d("", "Step 3...");
}

@Override
public void run()
{
// validate server ip
if (MainActivity.SERVER_IP != "")
{
try
{
/* do socket stuff here... */
}
/*
catch exceptions here...
*/
else
{
setStatus("Wrong IP!!");
}
}

//
// message handler
//
public void setStatus(String msg)
{
// do status stuff here e.g. setting textview
}

//
// message handler for status edit box
//
Handler h = new Handler()
{
//EditText et = (EditText)findViewById(R.id.status_text);
TextView tv = (TextView)_V.findViewById(R.id.status_text);

@Override
public void handleMessage(Message msg_obj) {
String s = (String)msg_obj.obj;

tv.setText(s);

}
};
}

然后从 MainActivity.java 我正在这样做:

public Context ctx;

TextView status;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ctx = this;
... other stuff
}

// on connect
// we create a new thread to connect to server
//
public void onConnect(View view)
{
try
{
new Thread(new ClientThread(ctx)).start(); <== creating new object is issue!
}
catch (IllegalStateException is)
{
is.printStackTrace();
}
}

这是打印的错误:

03-12 22:00:55.826: E/AndroidRuntime(1897): Caused by: java.lang.NullPointerException
03-12 22:00:55.826: E/AndroidRuntime(1897): at com.example.helloapp.ClientThread$1.<init>(ClientThread.java:101)

我尝试过的:

当我将 ClientThread 类放入 MainActivity 类中时,一切都很好。但我想将类分离到它自己的文件中。为什么我不能按照我正在做的方式来调用它,什么是正确的方式?

最佳答案

NPE 显然是因为 ctx 为 null,但 ctx = this; 等没有多大意义。如果 ctx 是一个自值实例变量,它甚至根本不需要存在。只需删除它并根据需要在整个过程中使用 thisMainActivity.this 即可。

关于java - 为什么创建从工作线程实现可运行的类的对象会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22367818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com