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

标签 java android multithreading illegalstateexception

我正在为 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/

相关文章:

java - android 按钮间距均匀

java - IPackageStatsObserver 无法解析为类型 (Android)

Java自动创建数据库

Arch Linux 上的 Android Studio 错误

python - 多人游戏中的Pygame和socket : OverflowError

java - Java中的多线程编程,使用信号量

JavaFX UI 卡住问题

java - 如何同步时间到安卓

android - 免费的条形码图像解码库

c++ - C++ Boost 中的线程数组