如何从其他类返回文件?仅返回null

时间:2016-10-07 11:30:45

标签: java swing file jfilechooser

我正在尝试返回用户选择的文件。这很好。我可以在openFile中检查fileToOpen并且它是100%正确的,但是当我在main方法中sysout它时,我只是得到null。我想要用户选择的路径。

这是主要课程:

    public class Main {

    public static void main(String[] args) {

        File fileToOpen = null;

        ReadIn openLog = new ReadIn();

        openLog.openFile(fileToOpen);

        System.out.println(fileToOpen);

    }
}

这是ReadIn类:

public class ReadIn extends JFrame{


    public File openFile(File fileToOpen){

        final JFileChooser fileChooser = new JFileChooser();
        int modalToComponent=fileChooser.showOpenDialog(this);
        if (modalToComponent == JFileChooser.APPROVE_OPTION) {
            fileToOpen = fileChooser.getSelectedFile();         
        }

        return fileToOpen;

    }

}

1 个答案:

答案 0 :(得分:5)

您的代码期望openFile方法能够进入调用方法并修改其局部变量之一。它不能做到这一点,它不是Java有 1 的功能(并不是解决这个问题的有用方法)。

您的方法已经返回File。只需删除参数并使其成为局部变量:

public File openFile(/*no argument here*/){
    File fileToOpen; // Local variable

    final JFileChooser fileChooser = new JFileChooser();
    int modalToComponent=fileChooser.showOpenDialog(this);
    if (modalToComponent == JFileChooser.APPROVE_OPTION) {
        fileToOpen = fileChooser.getSelectedFile();         
    }

    return fileToOpen;

}

然后在使用它时,使用返回值:

public static void main(String[] args) {

    File fileToOpen = null;

    ReadIn openLog = new ReadIn();

    fileToOpen = openLog.openFile();    // ***

    System.out.println(fileToOpen);

}

1 该功能被称为"传递参考,"如果您感兴趣,这意味着"将对变量的引用传递给方法/函数。" Java从不这样做,它总是将变量的传递给方法(和类似方法的东西,比如构造函数)("传值和#34;)。更多:Is Java "pass-by-reference" or "pass-by-value"?