【问题标题】:How to properly implement the FileChooser in Java如何在 Java 中正确实现 FileChooser
【发布时间】:2013-10-03 02:02:31
【问题描述】:

所以我在实现 JFileChooser 时遇到了问题,我正在制作一个非常简单的程序,需要抓取一个 CSV 文件。我希望实现一个非常简单的文件选择器,然后检查以确保扩展名是 CSV。

这是我的运行类的代码,用户将在其中选择文件。

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JFrame;


public class Run 
{   
    JFrame frame = new JFrame();
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.showOpenDialog(frame);
    File selFile = fileChooser.getSelectedFile();
    Reader reader = new Reader(selFile);
}

这是我在编译之前在 eclipse 中遇到的错误。

Syntax error on tokens, misplaced construct.

错误发生在fileChooser和showOpenDialog之间的时间段。

第二个错误出现在框架上。

Syntax error on token "frame", VariableDecleratorID expected after this token.

到目前为止,我并不完全确定自己做错了什么。

感谢您的帮助。

【问题讨论】:

标签: java file csv


【解决方案1】:

声明

fileChooser.showOpenDialog(frame);

是非声明性语句,因此需要在代码块中,例如方法。该应用程序没有main 方法,因此不仅可以简单地用作语句的周围代码块,还可以用作应用程序的入口点。

public class Run {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                JFileChooser fileChooser = new JFileChooser();
                fileChooser.showOpenDialog(frame);
                File selFile = fileChooser.getSelectedFile();
                // use selFile...
            }
        });
    }
}

【讨论】:

  • 所以我根本不能在我的构造函数中使用它?或者更确切地说,我没有意识到我无法在我的构造函数中使用它。
  • 通常你不希望在它实例化的类时弹出一个对话框...:)
  • @TacticallySuperiorAvocado 您可以在构造函数中使用它,这是一个非常糟糕的主意,但您可以。问题是您的构造函数中没有该代码public Run{ .. some code .. } Insde 您的 Run 类,您可以添加此构造函数并在那里填充它。
  • 我一定是半睡半醒。我完全忘记了你需要一个 main 方法这一事实。
【解决方案2】:

类中的所有代码行都是实例变量的声明及其初始化,除了

fileChooser.showOpenDialog(frame);

这是对对象的方法调用,因此它不能是类的成员。

类成员(简化版)是属性和方法(扩展版:还可以包括静态变量、静态方法、内部类、静态块……)

其背后的原因很简单:在 OO 环境中,如果您不触发方法调用,则不会发生任何事情,也不应该发生任何事情。

因此,第一步是将代码放入方法中,这可能是构造函数或普通方法。

第二步是你应该调用这个方法。如果它在构造函数中,那么它会在(并且每次)创建类的新实例时执行。否则需要实例化类,然后调用方法。

第三步是程序启动时需要启动所有代码,你通过指示JVM“运行”一个特定的类来启动一个java程序,这个类必须有一个public static void main(String [] args) 方法,这是每个 java 应用程序的入口点。

如果你只是想测试一些东西,把所有 5 行代码放在一个 main 方法中......

所以

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JFrame;


public class Run {   
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.showOpenDialog(frame);
        File selFile = fileChooser.getSelectedFile();
        Reader reader = new Reader(selFile);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2018-10-08
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多