Вызов JDateChooser setDate неожиданно завершает выполнение - PullRequest
1 голос
/ 21 сентября 2011

Я использую Toeder JDateChooser в своем автономном приложении Java, как показано в фрагменте кода ниже.Цель здесь:

  1. Чтобы переместить экземпляр календаря на желаемую неделю года, а затем
  2. Чтобы установить дату начала и дату окончания желаемой неделисоответственно.Эти даты хранятся в двух экземплярах JDateChooser, а именно: jDateChooserBookBegin и jDateChooserBookEnd.
Calendar c = Calendar.getInstance();
int currentWeekOfYear = c.get(Calendar.WEEK_OF_YEAR);
int desiredWeekOfYear = jComboBookWeekMainPanel.getSelectedIndex() + 1;
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());

for (int i = currentWeekOfYear; i < desiredWeekOfYear; i++) {
    c.add(Calendar.DAY_OF_WEEK, 7); //e.g. set to next Monday
}
jDateChooserBookBegin.setDate(c.getTime()); // ***** HERE *****

c.add(Calendar.DAY_OF_WEEK, 6); //set to the end of week e.g. Sunday
jDateChooserBookEnd.setDate(c.getTime());

Проблема: допустим, приведенный выше фрагмент кода выполняется внутри метода.Я проверил код в режиме отладки в neatbeans и клянусь, когда выполнение достигает строки, отмеченной пунктирной стрелкой, остальные строки вообще не выполняются, и инкапсулирующий метод немедленно возвращается вызывающей стороне.Это приводит к тому, что jDateChooserBookEnd не устанавливается на правильную дату, и моя программа в результате ведет себя нежелательным образом.

Вопрос: Почему метод setDate класса JDateChooser вызывает остальную частьстроки не должны быть выполнены, возвращаясь к вызывающей стороне?Есть ли известная ошибка в этом?Есть ли у вас какие-либо подсказки?Это выглядит довольно невозможно, но это происходит.Я использую Java 6.


Полное содержание метода доступно ниже.Приведенный выше фрагмент является упрощенной версией того, что вы видите ниже.В программе у меня есть два jButton, названных на следующей неделе и на предыдущей неделе.При каждом нажатии одной из этих кнопок соответствующий метод actionPerformed вызывает метод ниже.

private void update_DateFieldsInMainPanel() { 
    Calendar c = Calendar.getInstance();
    int currentWeekOfYear = c.get(Calendar.WEEK_OF_YEAR); 
    int desiredWeekOfYear = jComboBookWeekMainPanel.getSelectedIndex() + 1;             c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); 

    if (desiredWeekOfYear ==currentWeekOfYear) {                             
        jDateChooserBokMainFrom.setDate(c.getTime());        
        c.add(Calendar.DAY_OF_WEEK, 6); 
        jDateChooserBokMainTill.setDate(c.getTime());   
    } 
    else if (desiredWeekOfYear > currentWeekOfYear) { 
        for (int i = currentWeekOfYear; i < desiredWeekOfYear; i++) { 
            c.add(Calendar.DAY_OF_WEEK, 7); 
        } 
        jDateChooserBokMainFrom.setDate(c.getTime()); 
        c.add(Calendar.DAY_OF_WEEK, 6); 
        jDateChooserBokMainTill.setDate(c.getTime()); 
    }
    else { 
        for (int i = currentWeekOfYear; i > desiredWeekOfYear; i--) { 
            c.add(Calendar.DAY_OF_WEEK, -7); 
        }
        jDateChooserBokMainFrom.setDate(c.getTime());   
        c.add(Calendar.DAY_OF_WEEK, 6); 
        jDateChooserBokMainTill.setDate(c.getTime());  
    }
}

1 Ответ

0 голосов
/ 21 сентября 2011

Попробуйте поймать Бросок вместо исключения.

...