2012-07-09 116 views
0

我正在尝试创建任务表并操作其内容。我正在处理一个我不明白的错误,并非常感谢您的帮助。我对这个问题的长度进行了标记,但试图尽可能多地提供细节。添加新记录时ArrayList记录的错误更新

tasksRepository存储记录,这被构造在类的taskdef,如数组列表。该方法包含ArrayList类的add()和get()方法。

taskDef对象的参数是使用本地set方法创建的。以下是此类方法的一个示例:如果交付的参数与存储的值不同,则它将存储值,并且该事件将被添加到日志记录中。无论如何,一个成功的标志被重新调整。

public static Boolean setProjectNumber(String projectNumberI) 
{ // All the 
    if (projectNumberI != projectNumber) 
    { 
     projectNumber = projectNumberI; 
     logAccumulator = logAccumulator + "; project number (" + projectNumberI + ")"; 
    } 
    return true; 
} 

private static void setLog() 
{ // When all the parameters are set, the log parameter is updated with time tag 
    String t = formatterFull.format(GregorianCalendar.getInstance().getTime()); 
    log = log + "\n" + t + ": " + logAccumulator;  
} 

tasksTableProcessing包含任务操作。以下内容包含构造函数。它是以更简单的形式开始的,但在调查过程中我改变了它。类taskStatus是返回字符串的ENUM。该方法getLog()简单地返回日志字段

public tasksTableProcessing() 
{ // constructor. Creates the tableRepository object with test records 
    tasksRepository.clearDb(); 

    taskDef task = null; 
    task = new taskDef ("P1000", "O1", taskStatus.started(), "1", "false", "false"); 
    tasksRepository.addTask (task); 
    System.out.println("\nLog 0: \n" + tasksRepository.getTask(0).getLog()); 

    task = null; 
    task = new taskDef ("P1000", "O1", taskStatus.started(), "2", "false", "true"); 
    tasksRepository.addTask (task); 
    System.out.println("\nLog 1: \n" + tasksRepository.getTask(1).getLog()); 

    task = null; 
    task = new taskDef ("P2000", "O2", "closed", "63", "true", "false"); 
    tasksRepository.addTask (task); 
    System.out.println("\nLog 2: \n" + tasksRepository.getTask(2).getLog()); 

    task = null; 
    task = new taskDef ("P2000", "O2", "closed", "64", "true", "true"); 
    tasksRepository.addTask (task); 
    System.out.println("\nLog 3: \n" + tasksRepository.getTask(3).getLog()); 
} 

以下为日志。它表明,当引入新记录时,所有旧记录都会更新。

登录0:

09/07/2012 10点21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态

日志1:项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动)

09/07/2012 10:21:项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(开始);任务(任务2);任务ID(2);送货标志(真)

日志2:

2012年9月7日上午10:21:项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(开始)

09/07/2012 10:21:项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(开始);任务(任务2);任务ID(2);送货标志(真)

2012-09-07 10:21:项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(开始);任务(任务2);任务ID(2);投递标志(true);项目编号(P2000);任务(任务63);任务ID(63);拥有者(O2);状态(关闭);关键路径(true);输送标志(假)

登录3:

09/07/2012 10时21:;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动)

09/07/2012 10:21:项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(开始);任务(任务2);任务ID(2);送货标志(真)

2012-09-07 10:21:项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(开始);任务(任务2);任务ID(2);投递标志(true);项目编号(P2000);任务(任务63);任务ID(63);拥有者(O2);状态(关闭);关键路径(true);送货标志(false)

09/07/2012 10:21:项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(开始);任务(任务2);任务ID(2);投递标志(true);项目编号(P2000);任务(任务63);任务ID(63);拥有者(O2);状态(关闭);关键路径(true);投递标志(false);任务(任务64);任务ID(64);交货标志(真)

+0

大背景,但我不确定我能看到问题出在哪里。 – shem 2012-07-09 09:23:37

+0

您可以显示taskDef的构造函数和tasksRepository.addTask(task)的定义的代码吗? – Sabbath 2012-07-09 09:30:02

回答

1

鉴于方法签名,存储您的任务定义为静态字段,而不是实例字段的成员。静态字段是类TaskDef本身的字段,而不是特定TaskDef实例的字段。

阅读关于instance and class members的Java教程。

+0

非常感谢哟:删除静态声明(过去由于某些编译问题而添加的声明)可以完全解决问题 – user1511360 2012-07-09 10:46:33