Преобразование даты jcalendar в XMLGregorianCalendar Получение нулевого значения

у меня проблема, я просто получаю нулевое значение от jDateChooser в jCalendar.

Этот метод предназначен для преобразования java.util.Date в XMlGregorianCalendar :

DatatypeFactory df;
public XMLGregorianCalendar function_ConvertAsXMLGregorianCalendar(Date date) {
    if (date == null) {
        System.out.println("Error on Function Convert Date into XML Gregorian Calendar");
        return null; 
    } else {
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTimeInMillis(date.getTime());
        return df.newXMLGregorianCalendar(gc);
    }
}

И это 2 функции, которые getStart и getEnd Dates.

private XMLGregorianCalendar getStartDate(){
    Date dateStarting  = jDateChooserStart.getDate();
    System.out.println("Date Start : " + dateStarting.toString());
    XMLGregorianCalendar cal = function_ConvertAsXMLGregorianCalendar(dateStarting);
    System.out.println("Converted Date : " + cal.toXMLFormat());
    return cal;
}

private XMLGregorianCalendar getEndDate(){
    Date dateEnding = jDateChooserEnd.getDate();
    System.out.println("Date End : " + dateEnding);
    return function_ConvertAsXMLGregorianCalendar(dateEnding);
}

Затем я просто помещаю метод внутрь объекта с именем schedule:

schedule.setStartDate(getStartDate());
schedule.setEndDate(getEndDate());

Результат Netbeans (v7.1)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Frames.CreateSchedule.function_ConvertAsXMLGregorianCalendar(CreateSchedule.java:181)
at Frames.CreateSchedule.getStartDate(CreateSchedule.java:188)
at Frames.CreateSchedule.SubmitButtonActionPerformed(CreateSchedule.java:204)
at Frames.CreateSchedule.access$000(CreateSchedule.java:16)

что не так?

Спасибо раньше.

ОБНОВЛЕНИЕ ::

Я просто меняю функцию на это:

public XMLGregorianCalendar function_ConvertAsXMLGregorianCalendar(Date date) {
    if (date == null) {
        System.out.println("Error on Function Convert Date into XML Gregorian Calendar");
        return null; 
    } else {
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTimeInMillis(date.getTime());
        DatatypeFactory df = null;
        return df.newXMLGregorianCalendar(gc);
    }
}

ОБНОВЛЕНИЕ 2# ::

После инициализации метода newInstance() я получаю еще одну ошибку:

java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

Я просто меняю имя пакета с

java.util.Date into java.SQL.Date

затем кастинг:

Date dateStarting  = (Date) jDateChooserStart.getDate();
Date dateEnding    = (Date) jDateChooserEnd.getDate();

Как решить эту проблему?

еще раз спасибо.


person randytan    schedule 26.08.2012    source источник
comment
Вы все еще не создаете экземпляр df, см. мое обновление ниже.   -  person Reimeus    schedule 26.08.2012
comment
да, мне нужно создать экземпляр df var. Спасибо за ваш комментарий   -  person randytan    schedule 26.08.2012
comment
привет @Reimeus не могли бы вы мне снова помочь? спасибо   -  person randytan    schedule 26.08.2012
comment
Конечно, но, возможно, в новой публикации вопроса?   -  person Reimeus    schedule 26.08.2012
comment
привет @Reimeus, я только что написал в новом сообщении с вопросом: stackoverflow.com/questions/12131068/   -  person randytan    schedule 26.08.2012


Ответы (3)


Похоже, что df объявлен, но не создан:

DatatypeFactory df;

отсюда:

df.newXMLGregorianCalendar(gc);
^

Вы можете использовать DatatypeFactory. newInstance() для создания первого экземпляра, например:

DatatypeFactory df = DatatypeFactory.newInstance(); 
person Reimeus    schedule 26.08.2012
comment
ага, спасибо Реймеус. это ответ. мне нужно сначала создать newInstance(). - person randytan; 26.08.2012

Хотя это не очевидно без правильных номеров строк в вашем коде, наиболее вероятной причиной NullPointerException является строка:

  return df.newXMLGregorianCalendar(gc);

с вашим df равным нулю. Где вы инициализируете это поле?

person akf    schedule 26.08.2012
comment
да, я просто забыл указать метод инициализации. @akf не могли бы вы мне снова помочь? (обновление 2#) пожалуйста. спасибо - person randytan; 26.08.2012

Я не совсем понимаю вашу проблему, но мне кажется, что это легко исправить, позвоните в свой Календарь, как это должно работать (я думаю).

Calendar timeStamp = new GregorianCalendar();
person Daniel Haro    schedule 26.08.2012