Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.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,我有一个在按下按钮时调用的函数,它有一个线程,本来应该发送和清除TextView文本,但它没有发生。 也没有堆栈跟踪 public void sendMessage(View view) { if (input_text.getText().length() > 0) { new Thread(new Runnable() { @Override public void run(

我有一个在按下按钮时调用的函数,它有一个线程,本来应该发送和清除TextView文本,但它没有发生。 也没有堆栈跟踪

    public void sendMessage(View view) {
        if (input_text.getText().length() > 0) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    TextMessage message = new TextMessage(input_text.getText().toString(), 0, MainHandler.getUserID(), MainHandler.getUsername());
                    MainHandler.sendObject(message);
                    input_text.setText("");
                }
            });
        }
    }
编辑:
忘记启动线程,花了数小时寻找问题,而问题却显而易见。

您没有启动线程:

        new Thread(new Runnable() {
            @Override
            public void run() {
                TextMessage message = new TextMessage(input_text.getText().toString(), 0, MainHandler.getUserID(), MainHandler.getUsername());
                MainHandler.sendObject(message);
                input_text.setText("");
            }
        }).start();

您需要在创建的
线程上显式调用
start()
(而不是
run()

这个答案指的是java swing

使用新线程修改UI是错误的。UI应该由UI线程修改! 请稍后使用invoke更新您的UI!


当然,您需要启动线程。

您必须调用
thread.start()
。否则,线程对象就在那里等待启动


谢谢!,将把输入文本放在线程外。请注意,您提供的链接是关于Swing的。这个问题是关于Android的。你是对的=)对不起,我没有看到标签。
public void sendMessage(View view) {
    if (input_text.getText().length() > 0) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                TextMessage message = new TextMessage(input_text.getText().toString(), 0, MainHandler.getUserID(), MainHandler.getUsername());
                MainHandler.sendObject(message);
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        input_text.setText("");
                    }
                });
            }
        });
        t.start();
    }
}