private static final int SERVERPORT = 23; //port ng tcp
// String SERVER_IP ="0";
private static String SERVER_IP = "192.168.0.22"; 这是切换按钮监听器,以连接如何在按下切换按钮时停止线程,并在再次按下时断开。
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的值?
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();
}
}
}发布于 2018-04-14 04:59:16
因为Thread.stop()被废弃了,因为它本身是不安全的。实现预期行为的一种方法是中断线程。更多信息可以找到这里。
你可以这样做:
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不是最终的。
但是,我建议您不要这样做,因为这不是一个良好的实践,并可能产生影响,同时调试。
https://stackoverflow.com/questions/49826689
复制相似问题