Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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 即使I';我正在做另一件事_Java_Android_Multithreading_Ui Thread_Countdownlatch - Fatal编程技术网

Java 即使I';我正在做另一件事

Java 即使I';我正在做另一件事,java,android,multithreading,ui-thread,countdownlatch,Java,Android,Multithreading,Ui Thread,Countdownlatch,我有一段代码,只要点击一个按钮,服务就会从一个新线程启动,服务就会启动我的TCP客户端 TCP客户端一旦连接,将发送一个倒计时事件,通知片段继续工作 代码如下所示 connectButton = (Button) view.findViewById(R.id.connectBT); connectButton.setOnClickListener(new View.OnClickListener() { @Override p

我有一段代码,只要点击一个按钮,服务就会从一个新线程启动,服务就会启动我的TCP客户端

TCP客户端一旦连接,将发送一个倒计时事件,通知片段继续工作

代码如下所示

   connectButton = (Button) view.findViewById(R.id.connectBT);
        connectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {



                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {

                            // ***** IntentService Way ****** //
                            Intent intent = new Intent(getActivity(), NetworkService.class);
                            getActivity().startService(intent);

                            // Once client is connected, give the server some info about client
                            mCountDown.await(3000, TimeUnit.MILLISECONDS);

                            String json = jsonMaker.toJson(new DeviceInfo());
                            DispatchToServer(json);
                        } catch (Exception ie) {
                            ie.getMessage();
                        }
                    }
                }).run();
但是,当我单击“连接”时,由于某种原因,我的UI仍然会冻结,即使我正在等待一个不同的线程,而不是UI线程。当我使用AsyncTask而不是服务时,同样的代码工作正常。

尝试调用thread.start()而不是thread.run()

使用thread.start()而不是thread.run()

new Thread(new Runnable() {...}).run();
Thread#run
只是
Thread
类对
Runnable
接口的实现。它所做的只是委托给传递给构造函数的
run
方法

Java线程是通过
start
方法启动的:

new Thread(new Runnable() {...}).start();

我真是个白痴!这就是当你累了的时候编写代码时会发生的事情。谢谢谢谢,我确实知道这一点,但由于某种原因,我在这个非常重要的细节上被遮住了。感觉像个哑巴,这是很常见的陷阱。避免这种情况的一个好方法就是不要使用原始线程;相反,我更喜欢执行者服务。