java threadid=1:线程退出时出现未捕获的异常(组=0x4001d5a0)

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7889441/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 21:51:12  来源:igfitidea点击:

threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)

javaandroidexception

提问by Perrykipkerrie

While programming a countdown script into the status bar but I still keep forced closes when i call the function OnClickListener destroy to kill the application). I think something is wrong with the 'myNotificationManager.cancel(1);' but I can't figure out whats the mistake.

在将倒计时脚本编程到状态栏中时,但当我调用函数 OnClickListener destroy 以终止应用程序时,我仍然保持强制关闭)。我认为“myNotificationManager.cancel(1);”有问题 但我无法弄清楚什么是错误。

Here is my code

这是我的代码

public class ZaagmanActivity extends Activity {
public Handler handler = new Handler();
public NotificationManager myNotificationManager;
 private static final int NOTIFICATION_ID = 1;
/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button button = (Button)findViewById(R.id.refresh);
    button.setOnClickListener(refresh);
    Button button1 = (Button)findViewById(R.id.destroy);
    button1.setOnClickListener(destroy);
    Button button2 = (Button)findViewById(R.id.counter);
    button2.setOnClickListener(counter);
    //test


}
private void GeneratNotification(){

      myNotificationManager =
       (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

      CharSequence NotificationTicket = "Counter gestart";
      CharSequence NotificationTitle = "Zaagmans Counter";
      CharSequence NotificationContent = Nextwedsmall();
      long when = System.currentTimeMillis();

      Notification notification = new Notification(R.drawable.poppetje,NotificationTicket, when);
      Context context = getApplicationContext();
      Intent notificationIntent = new Intent(this,ZaagmanActivity.class);
      PendingIntent contentIntent =
      PendingIntent.getActivity(this, 0, notificationIntent, 0);

      notification.setLatestEventInfo(context, NotificationTitle,
        NotificationContent, contentIntent);

      myNotificationManager.notify(NOTIFICATION_ID, notification);

    }

private OnClickListener destroy = new OnClickListener() {
    public void onClick(View v) {
    System.out.println("Closing");
    myNotificationManager.cancel(1);
    handler.removeCallbacks(notification);
    finish();
              }
}; 

private OnClickListener counter = new OnClickListener() {
    public void onClick(View v) {
        notification.run();
              }
}; 

private OnClickListener refresh = new OnClickListener() {
    public void onClick(View v) {
      refresh();

      Button button1 = (Button)findViewById(R.id.destroy);
      button1.setOnClickListener(destroy);

     ; 
    }
}; 




private final Runnable showtext = new Runnable()  {


    public void run()  {

        TextView t=new TextView(getApplicationContext()); 
        t=(TextView)findViewById(R.id.t);
        t.setText(Nextwed());
        handler.postDelayed(this, 500);
    }
};

private final Runnable notification = new Runnable()  {


    public void run()  {
        GeneratNotification();
        handler.postDelayed(this, 500);
    }
};  



public Calendar Nextwednesday(int dow){
     Calendar date = Calendar.getInstance();
     int diff = dow - date.get(Calendar.DAY_OF_WEEK);
     if (!(diff > 0)) {
         diff += 7;
     }
     date.add(Calendar.DAY_OF_MONTH, diff);
     date.set(Calendar.HOUR_OF_DAY, 12);
     System.out.println(date);
     return date;
} public String Nextwedsmall() {
    //

    long wednes = Nextwednesday(Calendar.WEDNESDAY).getTimeInMillis();
    System.out.println(wednes);

    Date date = new Date();   // given date
    Calendar date2 = GregorianCalendar.getInstance(); // creates a new calendar instance
    date2.setTime(date); 
    long now = date2.getTimeInMillis();

    long zaagmans = wednes - now;

    System.out.println("time "+date2.getTime());
    long Hour = date2.get(Calendar.HOUR_OF_DAY);
    Hour = Hour -2;
    long Minute = date2.get(Calendar.MINUTE);
    long Seconds = date2.get(Calendar.SECOND);
    long mSeconds = date2.get(Calendar.MILLISECOND);
    float total = (mSeconds + (1000*Seconds) + (60*1000 * Minute) + (60*60*1000 * Hour));

    zaagmans = (long) (zaagmans - total + (11*60*60*1000));
    long days  = zaagmans / (1000*60*60*24);
    long hours = zaagmans / (1000*60*60) ;
    long mins  = zaagmans / (1000*60) ;
    long  secs  =  zaagmans / 1000 ;
    long dd = days;
    long  hh = hours - days  * 24;
    long  mm = mins  - hours * 60;
    long  ss = secs  - mins  * 60;
    System.out.println(date2);
    date2.clear();
    return (dd+" dag(en), "+hh+" uur(en), "+mm+" minuten en "+ss+" seconden");
}
public String Nextwed() {
    //

    long wednes = Nextwednesday(Calendar.WEDNESDAY).getTimeInMillis();
    System.out.println(wednes);
    Date date = new Date();   // given date
    Calendar date2 = GregorianCalendar.getInstance(); // creates a new calendar instance
    date2.setTime(date); 
    long now = date2.getTimeInMillis();
    long zaagmans = wednes - now;
    System.out.println("time "+date2.getTime());
    long Hour = date2.get(Calendar.HOUR_OF_DAY);
    Hour = Hour - 13;
    long Minute = date2.get(Calendar.MINUTE);
    long Seconds = date2.get(Calendar.SECOND);
    long mSeconds = date2.get(Calendar.MILLISECOND);
    float total = (mSeconds + (1000*Seconds) + (60*1000 * Minute) + (60*60*1000 * Hour));

    zaagmans = (long) (zaagmans - total);
    long days  = zaagmans / (1000*60*60*24);
    long hours = zaagmans / (1000*60*60) ;
    long mins  = zaagmans / (1000*60) ;
    long  secs  =  zaagmans / 1000 ;
    long dd = days;
    long  hh = hours - days  * 24;
    long  mm = mins  - hours * 60;
    long  ss = secs  - mins  * 60;
    System.out.println(date2);
    date2.clear();
    return ("Dagen: "+dd+", Uren: "+hh+", Minuten: "+mm+", Seconden: "+ss+"  ");
}
public void refresh(){
    Calendar calendar = Calendar.getInstance();
    int day = calendar.get(Calendar.DAY_OF_WEEK);
    int hour = calendar.get(Calendar.HOUR_OF_DAY);
    hour = hour + 2; 
     if(day==4 && hour >= 12){
    System.out.println("woensdag");
      setContentView(R.layout.zaagmans);
     }
     else if(day==5){
       System.out.println("donderdag");
         setContentView(R.layout.zaagmans);
        }
     else if(day==6 && hour <= 17){
       System.out.println("vrijdag");
         setContentView(R.layout.zaagmans);
        }
     else if(day==6 && hour > 17){
       System.out.println("vrijdag"); 
     setContentView(R.layout.weekend);
     }
     else if(day==7 || day==1){
       System.out.println("Weekend");
     setContentView(R.layout.weekend);
     }
     else{
       setContentView(R.layout.jammer);
       showtext.run();
     }
  }


   }

And here is my log

这是我的日志

10-25 14:03:21.200: W/dalvikvm(12287): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
10-25 14:03:21.210: E/AndroidRuntime(12287): FATAL EXCEPTION: main
10-25 14:03:21.210: E/AndroidRuntime(12287): java.lang.NullPointerException
10-25 14:03:21.210: E/AndroidRuntime(12287):    at nl.zaagmans.ZaagmanActivity.run(ZaagmanActivity.java:128)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at nl.zaagmans.ZaagmanActivity.onClick(ZaagmanActivity.java:93)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at android.view.View.performClick(View.java:2532)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at android.view.View$PerformClick.run(View.java:9293)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at android.os.Handler.handleCallback(Handler.java:587)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at android.os.Looper.loop(Looper.java:143)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at android.app.ActivityThread.main(ActivityThread.java:4263)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at java.lang.reflect.Method.invokeNative(Native Method)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at java.lang.reflect.Method.invoke(Method.java:507)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-25 14:03:21.210: E/AndroidRuntime(12287):    at dalvik.system.NativeStart.main(Native Method)

采纳答案by HefferWolf

The line

线

t=(TextView)findViewById(R.id.t);

returns null, because your run method isn't in a scope of any layout file. The code doesn't make any sense btw, as you're creating an object and assign it to tright before doing this assignment.

返回 null,因为您的 run 方法不在任何布局文件的范围内。顺便说一句,代码没有任何意义,因为您正在创建一个对象并t在执行此分配之前将其分配给正确的对象。

And please don't post your full source code, only post the relevant parts.

并且请不要发布您的完整源代码,只发布相关部分。