2014-02-11 110 views
-2

从一月份回到十二月,我遇到了一个问题,我尝试了各种各样的东西,但即时获得nullexception。我使用一个按钮,并把一个mouselistener,所以每次我点击它,它约一个月。但一月之后,即使我在检查月份之前更改了一年,它也不会减少到十二月份。这是我所做的。从去年一月到去年十二月在java中减少的月份

Button btnNewButton = new Button(composite, SWT.NONE); 
    btnNewButton.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseUp(MouseEvent e) { 
      moveCalendar("down"); 
     } 
    }); 

那么这里是我的moveCalendar ..

public void moveCalendar(String move) 
{ 
    Calendar cal = GregorianCalendar.getInstance(); 
    resetBox(); 
    if(move.equals("down")) 
    { 
     dummyMonth--; 
     if(dummyMonth < 0) 
     { 
      dummyMonth = 11; 
      dummyYear--; 
     } 
    } 
    else 
    { 
     dummyMonth++; 
     if(dummyMonth > 11) 
     { 
      dummyMonth = 0; 
      dummyYear++; 
     } 
    } 

    cal.set(Calendar.YEAR,dummyYear); 
    setYear(dummyYear); 
    cal.set(Calendar.MONTH,dummyMonth); 
    setMonth(dummyMonth); 
    int dy = getFirstDay(cal.get(Calendar.MONTH),cal.get(Calendar.YEAR)); 
    int daysMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH); 
    populateCalendar(dy-1,daysMonth,cal.get(Calendar.DAY_OF_MONTH),dummyMonth); 
} 

我得到nullexception ..任何建议,发生了什么?

+1

'NullPointerException'说它来自哪一行?这对于弄清楚这里的'null'会有很大的帮助。 – rgettman

+4

这个异常带有一个类型,一条消息和一个堆栈跟踪,可以精确地告诉发生了什么以及在哪里。不要忽视这个令人难以置信的有用信息。 –

+0

如果你也发布了npe的堆栈跟踪,那么它会很有用 – ITomas

回答

1

尝试使用Joda-Time库。

它比股票java类有更好的日期和时间操作支持 - 以至于它是Java 8中新的dates and times API的基础。

在乔达时,你可以轻松地移动到前一个月,这样的代码:

YearMonth date = new YearMonth("2014-01"); 
date = date.minusMonths(1); //will equal 2013-11 

你的问题不说,不管你是刚刚处理的年月,或具有精确日期(年,月和日),但是无论采用哪种方式,只需要使用minusMonths方法,只需使用不同的类(例如,确切日期使用LocalDate类)。

要正确地与UI控件集成,在通过将每个控件设置为来自日期对象的正确值完成操作日期对象后,您将填充控件。

这种方法将比处理Calendar更容易。

相关问题