안드로이드 개발 질문/답변
(글 수 45,052)
09-01 10:07:38.778: WARN/dalvikvm(547): threadid=17: thread exiting with uncaught exception (group=0x4000fe70)
09-01 10:07:38.778: ERROR/AndroidRuntime(547): Uncaught handler: thread Thread-9 exiting due to uncaught exception
09-01 10:07:38.788: ERROR/AndroidRuntime(547): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at android.view.ViewRoot.checkThread(ViewRoot.java:2440)
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at android.view.ViewRoot.invalidateChild(ViewRoot.java:522)
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:540)
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2332)
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at android.view.View.invalidate(View.java:4437)
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at android.widget.TextView.checkForRelayout(TextView.java:5167)
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at android.widget.TextView.setText(TextView.java:2631)
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at android.widget.TextView.setText(TextView.java:2501)
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at android.widget.TextView.setText(TextView.java:2476)
09-01 10:07:38.788: ERROR/AndroidRuntime(547): at com.mir.Activity.GenBarcodeActivity$3.run(GenBarcodeActivity.java:306)
위와 같은 에러메세지가 나왔습니다. 아래는 에러가 발생하는 소스코드이구요.
public void run() {
//TOTAL_TIME=0;
while(TOTAL_TIME <= MAX_AVAILABLE_TIME){
try{
Thread.sleep(1);
}catch(Exception e){
Log.e("MIR","#ERROR: SLEEP ERROR.");
}
if(PREVIOUS_CHECK_TIME==0){
Log.i("MIR", "Case Total_Time is 0");
PREVIOUS_CHECK_TIME=System.currentTimeMillis();
}else{
TEMP_CURRENT_TIME=System.currentTimeMillis();
if((((TEMP_CURRENT_TIME-PREVIOUS_CHECK_TIME)/1000))==1){
Log.i("MIR", "Case: temp_current-previous == 1");
PREVIOUS_CHECK_TIME=TEMP_CURRENT_TIME;
TextView showTimer=(TextView)findViewById(TV_ID);
showTimer.setText(Long.toString(TOTAL_TIME));
TOTAL_TIME++;
}
}
}
}
try-catch에서 에러가 난건 아닌거 같고 Temp_current_time - previous_check_time/1000 ==1 요부분에서 에러가 난거 같은데 ...
간혹 저런 에러가 발생할때가 있어서요. 답변 부탁드리겠습니다 (_ _)
showTimer.setText(Long.toString(TOTAL_TIME));
에서 난 것입니다.UI와 관련된 작업은 대부분의 경우 Handler를 사용하여 처리하셔야 합니다.