首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过按下切换按钮来停止线程

如何通过按下切换按钮来停止线程
EN

Stack Overflow用户
提问于 2018-04-14 00:20:12
回答 1查看 51关注 0票数 1
代码语言:javascript
运行
复制
private static final int SERVERPORT = 23; //port ng tcp
// String SERVER_IP ="0";
private static String SERVER_IP = "192.168.0.22"; 

这是切换按钮监听器,以连接如何在按下切换按钮时停止线程,并在再次按下时断开。

代码语言:javascript
运行
复制
cbtn.setOnCheckedChangeListener(new 
    CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)` {
            if(isChecked){
                tv1.setEnabled(false);
                try {
                        new Thread(new ClientThread()).start();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
            } else {
                try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    tv1.setEnabled(true);
                    //   MainActivity.SERVER_IP = tv1.getText().toString();
                    // thread.destroy();
                    Toast.makeText(getApplicationContext(), SERVER_IP,Toast.LENGTH_SHORT).show();
            }
        }
    });

这是线程CLientThread,如果它是静态的,我如何更改SERVER_IP的值?

代码语言:javascript
运行
复制
class ClientThread implements Runnable {
       @Override
       public void run() {
           try {
               InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
               socket = new Socket(serverAddr, SERVERPORT);
           } catch (UnknownHostException e1) {
               e1.printStackTrace();
           } catch (IOException e1) {
               e1.printStackTrace();
           }
       }
   }
EN

回答 1

Stack Overflow用户

发布于 2018-04-14 04:59:16

因为Thread.stop()被废弃了,因为它本身是不安全的。实现预期行为的一种方法是中断线程。更多信息可以找到这里

你可以这样做:

代码语言:javascript
运行
复制
CompoundButton.OnCheckedChangeListener() {
    private Thread client; 
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)` {
            if(isChecked){
                tv1.setEnabled(false);
                try {
                        client = new Thread(new ClientThread());
                        client.start();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
            } else {
                try {
                        socket.close();
                        client.interrupt();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                  ...
            }
        }
    });

关于你的第二个问题:

如果SERVER_IP是静态的,我如何更改它的值?

挺直的。只是重新分配:

SERVER_IP= <new ip address>

因为SERVER_IP不是最终的。

但是,我建议您不要这样做,因为这不是一个良好的实践,并可能产生影响,同时调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49826689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档