Java从filechooser读取文件并执行两个命令

时间:2014-06-01 18:53:05

标签: java class csv user-interface filechooser

我有这个按钮,它打开计算机上的文件目录,您可以从中选择文件并执行命令。我把他们每个都放在一个班级里,但只有一个人在跑。 如何让它先执行一个类然后再执行另一个类?代码如下:

JButton btnFindMe = new JButton("Find theta");
btnFindMe.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        JFileChooser fctheta = new JFileChooser();
        fctheta.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        int returnVal = fctheta.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            final File filetheta = fctheta.getSelectedFile();

            //counts the thetas

            class Inputcontatheta {
                public int main (String [] arg) throws Exception{
                    BufferedReader CSVFile = new BufferedReader (new FileReader (filetheta));
                    String dataRow = CSVFile.readLine();
                    int ii;
                    ii=0;
                    while (dataRow != null && !dataRow.isEmpty()){
                        dataRow = CSVFile.readLine ();
                        ii++;
                    }
                    CSVFile.close ();
                    return ii;
                }
            }
            //  exectues gaussians
            class Inputtheta {
                public void main (String [] arg) throws Exception{
                    Inputcontatheta dimensao= new Inputcontatheta();
                    int x=dimensao.main(arg);
                    BufferedReader CSVFile = new BufferedReader (new FileReader (filetheta));
                    String dataRow = CSVFile.readLine();
                    double [][] gaussiana = new double [x][6];
                    int j;
                    j=0;
                    while (dataRow != null && !dataRow.isEmpty()){
                        String [] dataArray = dataRow.split (",");
                        double[] doubleArray =new double[dataArray.length];
                        int i=0;
                        while (i< dataArray.length ) {
                            doubleArray[i]= Double.parseDouble(dataArray[i]);
                            i++;
                        }
                        gaussiana[j][0]=1.0;
                        gaussiana[j][1]=0.25;
                        gaussiana[j][2]=doubleArray[0];
                        gaussiana[j][3]=-doubleArray[0];
                        gaussiana[j][4]=doubleArray[1];
                        gaussiana[j][5]=doubleArray[2];
                        j++;
                        System.out.println(Arrays.toString(doubleArray));
                        dataRow = CSVFile.readLine();
                    }
                    CSVFile.close ();

                    System.out.println(gaussiana[1][5]);
                    //return gaussiana [][] double;
                }}
            }
        }});

1 个答案:

答案 0 :(得分:0)

尝试将InputcontathetaInputtheta类转换为ActionListener的方法,如下所示:

btnFindMe.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        JFileChooser fctheta = new JFileChooser();
        fctheta.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        int returnVal = fctheta.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File fileTheta = fctheta.getSelectedFile();
            int x = countThetas(fileTheta);
            executeGaussians(fileTheta, x);
        }
    }

    private int countThetas(File fileTheta) {
        // stuff from Inputcontatheta here
    }

    private void executeGaussians(File fileTheta, int x) {
        // stuff from Inputtheta here
    }
});

话虽这么说,也许不只是计算csv文件中的行数,countThetas方法实际上可以将csv文件解析为double[][]数组,你可以将该数组传递给{{ 1}}。 (如果您事先不知道数据的长度,可以使用java.util.ArrayList。)