버튼은 mainUI 스레드에 정의되어 있습니다. 여기에 문제를 일으키는 코드 부분이 있습니다.
button.setOnClickListener(new OnClickListener() {
public void onClick(View v){
new Thread(new Runnable() {
public void run() {
try {
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("Hello from " + client.getLocalSocketAddress());
final String msg = edi.getText().toString();
out.writeUTF("Client: " + msg);
runOnUiThread(new Runnable() {
@Override
public void run() {
tex.append(msg);
if (msg == "quit") {
button.setClickable(false);
tex.append("quitbutton");
}
tex.append("Client: " + msg + "\n");
edi.setText("");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}}).start();
}
});
나머지 코드는 완벽하게 작동합니다. 문자열로 "quit"를 보내면 msg 변수에 올바르게 표시됩니다. 문제는 if 블록에 전혀 들어 가지 않는 것 같습니다. 만약 그렇다면, textview에 "quibutton"텍스트가 표시되어야하는데, 그렇지 않습니다.
어떤 종류의 도움을 주시면 감사하겠습니다 :)
편집-나는 내가 문자열을 올바른 방법으로 비교하지 않는다는 것을 깨닫지 못했습니다. 아마도 ==를 사용하여 문자열을 직접 비교하고 싶었던 C ++ 연산자 오버로드 함수와 혼동되었을 것입니다.
이것을 변경
if (msg == "quit") {
button.setClickable(false);
tex.append("quitbutton");
}
이에
if (msg.equals("quit")) {
button.setEnabled(false);
tex.append("quitbutton");
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다