혼란을 드려 죄송합니다. Worng Logcat 정보를 게시했습니다. 나는 그 질문을 갱신했다. 시작을 클릭하여 스레드를 시작한 다음 입력을 클릭 할 때 thad가 계속 진행되도록하고 스레드에서 메시지를 처리 한 다음 주 스레드로 출력하고 텍스트보기를 업데이트하려고합니다. 어떻게 입력을 기다리고 핸들러에 대한 번들을 얻을 스레드를 시작하겠습니까?wait() 구현 방법; notifyAll();을 기다린다. 입력 버튼에서?
다음public class MainActivity extends Activity implements OnClickListener {
Handler mHandler;
Button enter;
Button start;
TextView display;
String dateString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
enter = (Button) findViewById(R.id.enter);
start = (Button) findViewById(R.id.start);
display = (TextView) findViewById(R.id.Display);
enter.setOnClickListener(this);
start.setOnClickListener(this);
mHandler = new Handler() { <=============================This is Line 31
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Bundle bundle = msg.getData();
String string = bundle.getString("outKey");
display.setText(string);
}
};
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.enter:
Message msgin = Message.obtain();
Bundle bundlein = new Bundle();
String in = "It Works!";
bundlein.putString("inKey", in);
msgin.setData(bundlein);
notifyAll();
break;
case R.id.start:
new myThread().hello.start();
break;
}
}
public class myThread extends Thread {
Thread hello = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
Looper.prepare();
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Handler Mhandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Bundle bundle = msg.getData();
dateString = bundle.getString("inKey");
}
};
Looper.loop();
Message msg = Message.obtain();
Bundle bundle = new Bundle();
bundle.putString("outKey", dateString);
msg.setData(bundle);
mHandler.sendMessage(msg);
}
};
}
}
가 로그 캣 정보입니다 : 다음은 내 코드입니다
06-27 00:00:24.832: E/AndroidRuntime(18513): FATAL EXCEPTION: Thread-1210
06-27 00:00:24.832: E/AndroidRuntime(18513): java.lang.IllegalMonitorStateException: object not locked by thread before wait()
06-27 00:00:24.832: E/AndroidRuntime(18513): at java.lang.Object.wait(Native Method)
06-27 00:00:24.832: E/AndroidRuntime(18513): at java.lang.Object.wait(Object.java:364)
06-27 00:00:24.832: E/AndroidRuntime(18513): at com
.example.learninghandlers.MainActivity$myThread$1.run(MainActivity.java:77)
logcat 대신 app의 stacktrace를 게시하는 것이 좋습니다. –
당신의'onCreate()'메쏘드에 들어간 것 같습니다. 줄 번호로, 나는 더 구체적 일 수있다. 아이디가 잘못되었거나 사용하기 전에 레이아웃을 부 풀리지 않을 가능성이 있습니다. –
31 번 줄은 어느 쪽입니까? –