2013-09-10 2 views
0

У меня есть метод hexFinder в классе checksumFinder. В hexFinder каждый файл считывается и называется либо хорошим файлом, либо bad. Затем положить в один из двух ArrayLists, listGoodFiles или listBadfiles.Имена файлов не добавляются к ArrayList из другого класса

Оба этих ArrayLists принадлежит к классу checksumGUI в многофайлового метода. Этот метод вызывает hexFinder для каждого файла внутри выбранной папки. Он также выводит сообщение, показывающее, сколько и файлов находились в папке.

Когда я добавляю имя файла в один из ArrayLists, ничего не добавляется.

Вот некоторый код из checksumFinder класса, которые могут быть причиной проблемы

class checksumFinder { 

checksumGUI cg = new checksumGUI(); 

String hexFinder(File currentFile,...){ 

.... // determine file is good/bad 

if (l1 == l2) { 
    cg.listGoodFiles.add(currentFile.getName()); 
    } else{ 
     cg.listBadFiles.add(currentFile.getName()); 
    } 

Вот Многофайловое метод из checksumGUI класса

public void multiFile(JFileChooser inFileName) throws FileNotFoundException, IOException { 

    checksumFinder cf = new checksumFinder(); 
    ArrayList<String> listTypeErrFiles = new ArrayList<String>(); 
    File folderFile = inFileName.getSelectedFile(); 
    File[] listAllFiles = folderFile.listFiles(); 

    for (int i = 0; i < listAllFiles.length; i++) { 
     File currentFile = listAllFiles[i]; 
     if (currentFile.isFile() && currentFile.getName().endsWith(".pcf")) { 

      cf.hexFinder(currentFile, null, null, null); 
     } else { 
      listTypeErrFiles.add(currentFile.getName()); 
      System.out.println("-----------------------------"); 
      System.out.println("Incorrect filetype:\n" + currentFile.getName()); 
      System.out.println("-----------------------------\n"); 
     } 
    } 

    JTextArea ta = new JTextArea(25, 25); 
    ta.setText("Folder contains " + listAllFiles.length + " files\n\n"+ "Folder has " + 
      listGoodFiles.size() + " good files;\n" + listGoodFiles + "\nFolder has " + 
      listGoodFiles.size() + " bad files;\n" + listBadFiles +"\nFolder has " + 
      listTypeErrFiles.size() + " file of wrong type;\n" + listTypeErrFiles); 

      ta.setWrapStyleWord(true); 
      ta.setLineWrap(true); 
      ta.setCaretPosition(0); 
      ta.setEditable(false); 

      JOptionPane.showMessageDialog(null, 
      new JScrollPane(ta),"Folder Contents", JOptionPane.INFORMATION_MESSAGE); 
} 

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

EDIT:

Я уже просмотрел подобные вопросы, как this, но я ничего не нашел было полезным

EDIT:

The (самый последний) код checksumFinder класса можно найти HERE.

Любая помощь очень ценится, спасибо.

ответ

3

Вы создаете новый checksumGUI экземпляр в checksumFinder вместо доступа существующего экземпляра:

cg = new checksumGUI(); 

Вы должны сделать существующий экземпляр параметра конструктору вместо:

class checksumFinder { 
    private final checksumGUI cg; 

    checksumFinder(checksumGUI cg) { 
     this.cg = cg; 
    } 

    ... 
} 

И вместо checksumFinder cf = new checksumFinder(); в multiFile(), передать текущий экземпляр checksumFinder конструктор:

checksumFinder cf = new checksumFinder(this); 

(Также, используя соглашения о кодировании java, например. капитализированные имена классов, сделает код более легким для чтения).

Смежные вопросы