我正在编写一些代码,以便选择我将从那里开始使用的多个文件目录中的任何一个。我想从一个单独的类调用一个函数来查找用户选择。我有一个全局ArrayList,它是根据是选择一个还是多个目录而添加的。我遇到的问题是,当我尝试调用一个函数来返回该ArrayList时,该代码总是在用户输入完成之前运行,因此它只返回一个空白的ArrayList,因为没有输入任何内容。
这是文件选择器的代码:
package application;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.File;
import java.util.*;
public class FileExplorer extends JPanel implements ActionListener {
//Intiate Buttons and File Chooser
JButton openButton = new JButton("Choose a File Directory...);
JButton openMultipleButton = new JButton("Choose Multiple File Directories...");
JFileChooser chooser;
ArrayList<File> filesChosen = new ArrayList<File>();
String choosertitle = "Show Picker";
public FileExplorer() {
//Add buttons and listeners
add(openButton);
openButton.addActionListener(this);
add (openMultipleButton);
openMultipleButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
//set chooser parameters
chooser = new JFileChooser();
chooser.setDialogTitle(choosertitle);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if (e.getActionCommand().matches("Choose Multiple File Directories...")){
//Set selection to allow multiple choices
chooser.setMultiSelectionEnabled(true);
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File[] numFiles = chooser.getSelectedFiles();
for (int i = 0; i < numFiles.length; i++) {
filesChosen.add(numFiles[i]);
}
} else {
System.out.println("No Selection ");
}
} else {
//Don't allow multiple choices
chooser.setMultiSelectionEnabled(false);
//return shows
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
filesChosen.add(chooser.getSelectedFile());
} else {
System.out.println("No Selection ");
}
}
//
//
}
public ArrayList<File> getFiles() {
return filesChosen;
}
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
public void launch() {
JFrame frame = new JFrame("");
FileExplorer panel = new FileExplorer();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add(panel, "Center");
frame.setSize(panel.getPreferredSize());
frame.setVisible(true);
}
这是我在其他课程中使用的电话,只是为了测试它是否有效:
FileExplorer fe = new FileExplorer();
fe.launch();
System.out.println(fe.getFiles());
我还试图编辑有问题的函数来重新检查ArrayList,如下所示:
public ArrayList<File> getFiles() {
if (filesChosen.isEmpty() ==false) {
return filesChosen;
} else {
try {
Thread.sleep(1000);
getFiles();
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
return null;
}
}
但变量从未更新过。即使用户输入后。我感到茫然,我对这个问题有任何帮助。