1

JDateChooser在我的独立 Java 应用程序中使用 Toeder,如下面的代码片段所示。这里的目的是:

  1. 将日历实例移动到一年中所需的一周,然后
  2. 相应地设置所需一周的开始日期和结束日期。这些日期保存在两个 JDateChooser 实例中,即jDateChooserBookBeginjDateChooserBookEnd
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());  
    }
}
4

1 回答 1

0

尝试捕获Throwable而不是 Exception。

于 2011-09-21T13:57:12.453 回答