gpt4 book ai didi

java - 用户第二次启动线程时出现 IllegalStateException

转载 作者:行者123 更新时间:2023-12-02 01:26:34 25 4
gpt4 key购买 nike

我正在为 Android 构建一个简单的消息应用程序,并且在发送短信时遇到一些问题。我第一次使用 OnlickListener 时,消息被发送并显示在我的 ListView 中。当我在 Activity 中第二次尝试时,我的应用程序因 IllegalStateException 崩溃。

我对线程了解不多,这是我唯一一次需要通过客户端重新启动线程

这是我遇到问题的代码部分

    sendbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (editText.getText().toString().length() == 0) {
System.out.println("Keine Nachricht zum versenden
vorhanden");
return;
} else {
if(!threadTextMessage.isAlive())
threadTextMessage.start();
}
}
});


threadTextMessage = new Thread(new Runnable() {
@Override
public void run() {
String name = filesystem.readFileLine("usr.txt", 0);
String password = filesystem.readFileLine("usr.txt", 1);
//benötigter recipient ist Instanzvariable
String mimetype = "text/plain";
String data = editText.getText().toString();

try {
message = post("http://palaver.se.paluno.uni-
due.de/api/message/send", buildJson(name, password, recipient, mimetype,
data));
System.out.println("Sende Nachricht:< {\"Username\":\"" +
name + "\", \"Password\":\"" + password + "\", \"Recipient\":\"" +
recipient + "\", \"Mimetype\":\"" + mimetype + "\", \"Data\":\"" + data +
"\"}");

runOnUiThread(new Runnable() {
@Override
public void run() {
editText.getText().clear();
}
});

threadTextMessage.interrupt();

} catch (Exception e) {
System.out.println("-----" + e.toString() + "------");
}

}
});

有人可以建议我该怎么做吗

最佳答案

一个线程不能启动两次。第一次启动线程并在最后中断它。但是第二次您在与之前相同的对象上调用 start() 方法。每次要启动线程时都需要创建一个新对象。尽管我有点困惑“isAlive()”并不能阻止错误,但这应该是问题所在。

所以在你的情况下:

    threadTextMessage = new Thread(new Runnable() {
@Override
public void run() {
String name = filesystem.readFileLine("usr.txt", 0);
String password = filesystem.readFileLine("usr.txt", 1);
//benötigter recipient ist Instanzvariable
String mimetype = "text/plain";
String data = editText.getText().toString();

try {
message = post("http://palaver.se.paluno.uni-
due.de/api/message/send", buildJson(name, password, recipient, mimetype,
data));
System.out.println("Sende Nachricht:< {\"Username\":\"" +
name + "\", \"Password\":\"" + password + "\", \"Recipient\":\"" +
recipient + "\", \"Mimetype\":\"" + mimetype + "\", \"Data\":\"" + data +
"\"}");

runOnUiThread(new Runnable() {
@Override
public void run() {
editText.getText().clear();
}
});


} catch (Exception e) {
System.out.println("-----" + e.toString() + "------");
}

}
});

每次开始前都必须完成此创建。或者最好将其放在自己的类中,这样您只需创建它的一个对象即可。但请删除 interupt() 调用,否则在创建 10 个对象后可能会有 10 个线程等待。让线程完成!

关于java - 用户第二次启动线程时出现 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826108/

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