2016-06-10 90 views
0

我实现了一个按钮,用户单击此按钮并弹出文件选择器,然后用户可以选择文件,但是当他更改其偏好时,程序始终会理解第一个文件。文件选择器(Swing)

我通过写下size()方法发现了这个bug。首先,用户选择的设备列表,其大小为20,通过另一个列表,其尺寸为100改变这个文件后,我期望看到100的大小,但我仍然看到20

chooser = new JButton("Choose Device List"); 
     chooser.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent arg0) { 
       JFileChooser fileopen = new JFileChooser(); 
       FileFilter filter = new FileNameExtensionFilter("csv files", "csv"); 
       fileopen.addChoosableFileFilter(filter); 

       int ret = fileopen.showDialog(null, "Open file"); 

       if (ret == JFileChooser.APPROVE_OPTION) { 
       try { 
        DeviceHelper.loadDevices(fileopen.getSelectedFile()); 
        int size = DeviceHelper.loadDevices(fileopen.getSelectedFile()).size(); 
        System.out.println("Size of the program " + size); 


       } catch (IOException e) { 


       } 

       } 

      } 
     }); 

我该如何解决这个问题?有人可以帮我吗?

编辑:

public static List<String> loadDevices(File file2) throws IOException { 

if (deviceAdresses == null) { 

    deviceAdresses = new ArrayList<>(); 

try (BufferedReader reader = new BufferedReader(new FileReader(file2))) { 

    String line = null; 
    while ((line = reader.readLine()) != null) { 
     if (line.trim().length() > 0) { 
     deviceAdresses.add(line); 
     } 
    } 

    } 

} 



return new ArrayList<String>(deviceAdresses); 

}

+0

'DeviceHelper.loadDevices'做什么?它返回一个List?这似乎仍然是大小为20 –

+0

向我们显示'DeviceHelper.loadDevices(File arg)'方法的代码。 – Azodious

+2

看起来,你对类DeviceHelper有一个问题,它不是一个标准的java类。要获得帮助,您需要提供仅使用标准Java类的[SSCCE](http://sscce.org)。 –

回答

2

删除此检查:

if (deviceAdresses == null) { 

正在发生的事情,一旦deviceAdresses被初始化,这个检查将永远是假的,来自新文件的行会永远不会被阅读。

+0

现在它工作=] – limonik