Java 如何从其他类返回文件?仅返回空值

Java 如何从其他类返回文件?仅返回空值,java,swing,file,jfilechooser,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();

我正在尝试返回用户选择的文件。那很好。我可以在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;

    }

}

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

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

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从不这样做,它总是将变量的值传递到方法(以及类似方法的东西,如构造函数)(“按值传递”)。更多信息:

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

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

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从不这样做,它总是将变量的值传递到方法(以及类似方法的东西,如构造函数)(“按值传递”)。更多: