Я пытаюсь получить путь, используя JFileChooser , а затем продолжаю выполнение программы. Сначала появляется рамка и предлагает пользователю нажать кнопку. Когда кнопка нажата, появляется окно JFileChooser , чтобы пользователь мог выбрать каталог.
Проблема заключается в следующем: при нажатии кнопки программа не ждет, пока пользователь выберет каталог, хотя появляется окно JFileChooser . Он переходит к следующей команде и выдает исключение NullPointerException. Чтобы выяснить это, я добавил метод promtENTERKey , поэтому программа останавливается и ожидает нажатия клавиши «ENTER».
Все хорошо, но я не хочу нажимать клавишу «ВВОД». Я хочу, чтобы программа продолжала после , когда пользователь выбирает каталог, не нажимая ничего. Я проверил похожие вопросы, но не смог сделать это. Я новичок в java (конечно, я получил много помощи для своего кода). Есть идеи?
Мой код выглядит следующим образом:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class DirChooser extends JPanel implements ActionListener {
JButton button;
static JFileChooser chooser = null;
public DirChooser() {
button = new JButton("Select Directory");
button.addActionListener (this);
add(button);
}
public static void main (String [] args) {
String path = getDir();
// ... code ...
}
public static String getDir() {
String dir = null;
JFrame frame = new JFrame("");
DirChooser panel = new DirChooser();
frame.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
frame.getContentPane().add(panel,"Center");
frame.setSize(panel.getPreferredSize());
frame.setLocationRelativeTo(null);
frame.setVisible(true);
promtENTERKey();
dir = chooser.getSelectedFile().getAbsolutePath();
frame.dispose();
return dir;
}
public Dimension getPreferredSize(){
return new Dimension(200, 100);
}
public void actionPerformed (ActionEvent e) {
chooser = new JFileChooser ();
chooser.setCurrentDirectory (new java.io.File("."));
chooser.setDialogTitle ("choose directory");
chooser.setFileSelectionMode (JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed (false); // disable the "All files" option.
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
System.out.println ("\n" + "Directory has been selected");
}
else {
System.out.println("No Selection ");
}
}
public static void promtENTERKey() {
System.out.println("\n" + "Select directory first and then press \"ENTER\" to continue...");
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
scanner.nextLine();
}
}