通过这个程序,我试图让用户选择一个代表4x4数独问题的文本文件。然后我的代理人将获取此文件并尝试解决数独难题。
我遇到的问题是,我似乎无法弄清楚如何选择正确的文件,然后传入方法调用进行处理。
这是我创建的文件选择器类。到目前为止,它成功地显示了一个按钮,点击后会显示计算机的文件结构,以便用户可以选择文件。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
/**
* Created by neil on 7/12/17.
*/
public class file_selector {
public JPanel panel1;
public File file;
JButton button1;
public file_selector() {
final JFileChooser fc = new JFileChooser();
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int returnVal = fc.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
System.out.println("You chose to open " + file.getName());
}
}
});
}
public File getFile() {
return file;
}
}
这是我尝试使用用户选择的文件的主要方法。当我将函数调用放在while循环中时(就像它当前一样)它永远不会继续,因为永远不会设置文件。如果我没有在while循环中放入函数调用,当我尝试处理文件时会收到nullPointerException错误,因为该文件的值为空。
public class sudoku {
//create 2d array that represents the 16x16 world
public cell[][] world_array = new cell[15][15];
static File myFile;
ArrayList<String> world_constraints;
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame("file_selector");
file_selector fs = new file_selector();
frame.setContentPane(fs.panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
myFile = fs.getFile();
while(myFile != null) {
sudoku my_puzzle = new sudoku();
my_puzzle.solve_puzzle();
}
}
我已经进行了大量的搜索,似乎无法找到我的file_selector类的错误,因此它没有为文件设置用户选择的值。
答案 0 :(得分:0)
您在显示框架之后以及用户有机会点击任何内容之前立即致电getFile
。由于while
的条件为false,因此循环立即结束,之后方法不会执行任何操作,特别是它永远不会再次调用getFile
。
两个选项:
让按钮解决难题,而不只是设置file
(更简单,只需更改actionPerformed
方法)。
在选择文件时让file_selector
发出事件并向其添加一个监听器(这对您来说可能是一个挑战)。