총 게시물 931건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

TimerTask 관련 에러 질문입니다...

글쓴이 : 안드로상현 날짜 : 2011-06-27 (월) 15:40 조회 : 20125
글주소 : http://www.androidside.com/B49_best/7802
 
  오라클자바교육센터 구로본점
안드로이드전문교육, SDK실무개발, APP개발프로젝트, 실습폰지원, 재직자환급
www.oraclejava.co.kr
  엠브이테크
임베디드 개발용역 및 양산 Rockchip Freescale 엑시노스
www.mvtech.or.kr
  G마켓 ANDROID
쇼핑을 바꾸는 쇼핑! G마켓 스마일클럽 15%+15%, 콘서트 티켓 증정! G마켓
www.gmarket.co.kr
신청하기


TimerTask에 대해 좀 알아보고싶어 공부하다가
어플실행 후 3초후에 다이얼로그 창을 띄우려고 하는데요...
자꾸 에러가 나네요..
 
혹시 모가 문제인지 아시는분 조언좀 부탁드려요
아래 소스입니다.
 
 
package com.TEST11;
import java.util.*;
import android.app.*;
import android.content.*;
import android.content.DialogInterface.OnClickListener;
import android.os.*;
public class TEST11 extends Activity {
   
    TimerTask task;
    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        timer();
       
    }
    public void timer(){
        task = new TimerTask() { 
   @Override
   public void run() {
    // TODO Auto-generated method stub
    dialog.setTitle("Timer");
    dialog.setMessage("Timer 작동!");
    dialog.show();
   }
  };
  Timer timer = new Timer();
  timer.schedule(task , 3000);
    }
}



서명합니다!

안드로상현 님의 개발 Q&A FAQ 최신글 [더보기]


질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

OSKIller 2011-06-27 (월) 15:43
스레드 에러 아닌가요?
핸들러로 해보세요
핸들러로 센드메시지딜레이드 하면 될듯

댓글주소 추천 0 반대 0
안드로상현 2011-06-27 (월) 15:45
혹시 저기서는 왜 안되는지 이유를 아시나요??
댓글주소 추천 0 반대 0
OSKIller 2011-06-27 (월) 15:45
스레드문제라면 다이얼로그가 UI스레드에서 동작 해야 하기 때문이라고 설명 드릴수 있죠
근데 에러가 어떤건지 말씀을 안해주시니 정확히 진단은 힘들겠네요

댓글주소 추천 0 반대 0
안드로상현 2011-06-27 (월) 15:50
아.....에러가 이렇게나옵니다.
06-27 15:52:28.124: ERROR/AndroidRuntime(9546): FATAL EXCEPTION: main
06-27 15:52:28.124: ERROR/AndroidRuntime(9546): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.TEST11/com.TEST11.TEST11}: java.lang.IllegalStateException: System services not available to Activities before onCreate()
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.os.Looper.loop(Looper.java:123)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at java.lang.reflect.Method.invokeNative(Native Method)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at java.lang.reflect.Method.invoke(Method.java:521)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:869)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:627)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at dalvik.system.NativeStart.main(Native Method)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546): Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.app.Activity.getSystemService(Activity.java:3526)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at com.android.internal.app.AlertController$AlertParams.<init>(AlertController.java:743)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.app.AlertDialog$Builder.<init>(AlertDialog.java:273)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at com.TEST11.TEST11.<init>(TEST11.java:13)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at java.lang.Class.newInstanceImpl(Native Method)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at java.lang.Class.newInstance(Class.java:1429)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
06-27 15:52:28.124: ERROR/AndroidRuntime(9546):     ... 11 more
댓글주소 추천 0 반대 0
OSKIller 2011-06-27 (월) 15:55
그거 같은데요

    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
요게 객체 생성 되기전에 떠서 그런거 아닌가요

댓글주소 추천 0 반대 0
안드로상현 2011-06-27 (월) 16:21
 public void timer() {
  task = new TimerTask() {
   @Override
   public void run() {
    // TODO Auto-generated method stub
    dialogtest();
   }
  };
  Timer timer = new Timer();
  timer.schedule(task, 3000);
 }
 public void dialogtest(){
  AlertDialog.Builder dialog = new AlertDialog.Builder(this);
  dialog.setTitle("Timer");
  dialog.setMessage("Timer 작동!");
  dialog.show();
 }
 
이렇게 생성을 안쪽에서 해줘도 에러가 나네요...
 
06-27 16:21:53.334: ERROR/AndroidRuntime(10929): FATAL EXCEPTION: Timer-0
06-27 16:21:53.334: ERROR/AndroidRuntime(10929): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-27 16:21:53.334: ERROR/AndroidRuntime(10929):     at android.os.Handler.<init>(Handler.java:121)
06-27 16:21:53.334: ERROR/AndroidRuntime(10929):     at android.app.Dialog.<init>(Dialog.java:101)
06-27 16:21:53.334: ERROR/AndroidRuntime(10929):     at android.app.AlertDialog.<init>(AlertDialog.java:63)
06-27 16:21:53.334: ERROR/AndroidRuntime(10929):     at android.app.AlertDialog.<init>(AlertDialog.java:59)
06-27 16:21:53.334: ERROR/AndroidRuntime(10929):     at android.app.AlertDialog$Builder.create(AlertDialog.java:786)
06-27 16:21:53.334: ERROR/AndroidRuntime(10929):     at android.app.AlertDialog$Builder.show(AlertDialog.java:801)
06-27 16:21:53.334: ERROR/AndroidRuntime(10929):     at com.TestTimer.TestTimer.dialogtest(TestTimer.java:36)
06-27 16:21:53.334: ERROR/AndroidRuntime(10929):     at com.TestTimer.TestTimer$1.run(TestTimer.java:26)
06-27 16:21:53.334: ERROR/AndroidRuntime(10929):     at java.util.Timer$TimerImpl.run(Timer.java:289)
 
타이머 안에서는 다이얼로그가 안되나봐요ㅠㅠㅠㅠ
 
댓글주소 추천 0 반대 0
OSKIller 2011-06-27 (월) 16:25
그건 스레드 에러 핸들러를 이용해보아요
댓글주소 추천 0 반대 0
안드로상현 2011-06-27 (월) 16:27
그럼 굳이 저렇게 할려고하면 핸들러를 이용하라는 말씀이시군요...
TimerTask에서는 안되는거구요..
댓글주소 추천 0 반대 0
OSKIller 2011-06-27 (월) 16:36
UI관련된 작업들은 다른 쓰레드에서는 안되요~
전부 핸들러~

댓글주소 추천 0 반대 0
안드로상현 2011-06-27 (월) 16:56
네! 알려주셔서 너무 감사합니다!!
 
댓글주소 추천 0 반대 0
안드로상현 2011-06-27 (월) 17:28
핸들러를 사용해서 구현했어요!!!!
OSKiller님 조언 감사합니다!!!
하루 마무리 잘하세요 ^^
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기