【问题标题】:Can't send a Month as a parameter无法将月份作为参数发送
【发布时间】:2019-04-12 07:36:48
【问题描述】:

我正在使用jFreeChart 制作甘特图并添加每个任务,我使用Enumeration 实用程序从Hashtable 获取元素。我可以发送年份和日期,但是当尝试使用此行发送月份之类的参数时会出现异常:

hT.get(obj).getFechaFin().getMonth()

其中hTHashtableobj 是索引。我知道getMonth() 返回一个int。它抛出:

Exception in thread "AWT-EventQueue-0" 
    java.lang.IllegalArgumentException: Requires start <= end.

然后更改Calendar.MARCH 的代码行,它工作并生成了图表。它还返回一个int,它们的索引都以 0 开头,表示第一个月的一月。那么为什么不工作呢?我正在使用jCalendar-1.4.jar 轻松地从组件中获取日期。

//here I load the Hashtable and I generate the Chart

public static IntervalCategoryDataset createDataset(){
    final TaskSeries s1 = new TaskSeries("Scheduled");

    for (Enumeration e = hT.keys(); e.hasMoreElements();) {
        Object obj = e.nextElement();
        s1.add(new Task(hT.get(obj).getTarea().toString(),
            new SimpleTimePeriod(
                date(hT.get(obj).getFechaInicio().getDay(),
                     hT.get(obj).getFechaInicio().getMonth(),                                              
                     hT.get(obj).getFechaInicio().getYear()),
                date(hT.get(obj).getFechaFin().getDay(),
                     hT.get(obj).getFechaFin().getMonth(),                                              
                     hT.get(obj).getFechaFin().getYear()))));
    }

    final TaskSeriesCollection collection = new TaskSeriesCollection();
    collection.add(s1);
    return collection;
}

//and here receives the month parameter 
private static Date date(final int day, final int month, final int year){
     final Calendar calendar = Calendar.getInstance();
     calendar.set(year,month,day);
     final Date result = calendar.getTime();
     return result;
}

我需要使用hT.get(obj).getFechaFin().getMonth(),因为它保存在二进制文件中。有没有办法转换成Calender.MONTH格式?

【问题讨论】:

  • 这是start &gt; end 时的预期行为。如果在调试器中看起来没问题,您可能会检查较大的代码是否存在竞争条件。
  • getFechaIniciogetFechaFin 返回什么类型?什么价值观?
  • @herMa694 将更多详细信息发布为对问题的编辑而不是评论。

标签: java date netbeans jfreechart


【解决方案1】:

我找到了一个简单的方法:

   public static IntervalCategoryDataset createDataset(){
    final TaskSeries s1 = new TaskSeries("Tareas");


    for (Enumeration e = hT.keys(); e.hasMoreElements();) {
        Object obj = e.nextElement();
        s1.add(new Task(hT.get(obj).getTarea().toString(),
                new SimpleTimePeriod(hT.get(obj).getFechaInicio(), hT.get(obj).getFechaFin())));

    }      
    final TaskSeriesCollection collection = new TaskSeriesCollection();
    collection.add(s1);
    return collection;
}

private static Date date 并不是必须的。因为我已经在hT.get(obj).getFechaInicio() 中传递了一个日期值。该方法仅通过传递日、月和年的int 值来构造日期值。现在我可以用这个生成甘特图了。

【讨论】:

  • 这是更好的方法;如果您添加有关数据类型的一些详细信息,您的答案将对其他人更有用,例如@Ole V.V.建议here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2022-08-09
  • 2021-12-17
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多