0

背景

所以我一直在努力改进我的代码风格并编写更多功能。我每天编写软件不是为了我的工作(网页设计),而是为了加快我的职责并使它们自动化并节省时间(这种方法已被证明是无价的,并使我在某种程度上成为了超级明星)。

问题

在我最近的一个项目中,我尝试通过以下方式使用 JFileChooser:

List<String> lines;
    do {
        lines = new ArrayList<>();
        try {
            lines = jFC.showOpenDialog(new JFrame() {
                {
                    // originally setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                            System.exit(0);
                        }
                    });
                }
            }) == JFileChooser.APPROVE_OPTION
                    ? Files.readAllLines(jFC.getSelectedFile().toPath())
                    : null;
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("Error selecting File.");
        }
        System.out.println("Here we go");
    } while (lines == null || lines.isEmpty());

但是,我的原始实现和修改后的实现都没有真正起作用,我使用 print 语句进行了测试(从未调用过重新实现的版本。)然后我尝试执行以下操作:

JFrame test = new JFrame();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lines = jFC.showOpenDialog(test) == JFileChooser.APPROVE_OPTION
        ? Files.readAllLines(jFC.getSelectedFile().toPath())
        : null;

这产生了相同的结果。我搜索了重复项,但找不到能重现我确切情况的内容。本质上,我希望我的程序在 JFileChooser 被取消时完全终止,但我不愿意更改我的三元语句,因为它不能修复我的预期行为,而是提出解决方法。我的直觉告诉我这是一个范围问题,但是对于不被调用的 windowClosing 来说,我提出了一些问题。

tl;博士

用于 JFileChooser 的 JFrame 上的 System.exit(0) 无法正常工作,不会更改流控制,所以不要费心询问。

4

0 回答 0