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