如何将方法中的变量声明为静态(java)

如何将方法中的变量声明为静态(java),java,nullpointerexception,static-methods,static-variables,Java,Nullpointerexception,Static Methods,Static Variables,我正在创建一个使用多个类的加密/解密程序。我有一个类是UI,使用带有文件选择器的JFrame表单,另一个类对所选文件进行加密/解密。当我尝试在encryption类中使用UI类中声明的java.io.File变量时,遇到了一个问题 文件选择器代码: public static void actionEncrypt() { encrypt = true; int retVal = selectFile.showOpenDialog(null); if (retVal ==

我正在创建一个使用多个类的加密/解密程序。我有一个类是UI,使用带有文件选择器的JFrame表单,另一个类对所选文件进行加密/解密。当我尝试在encryption类中使用UI类中声明的java.io.File变量时,遇到了一个问题

文件选择器代码:

public static void actionEncrypt() {
    encrypt = true;
    int retVal = selectFile.showOpenDialog(null);
    if (retVal == selectFile.APPROVE_OPTION) {
        java.io.File file = selectFile.getSelectedFile();
        System.out.println(file);
        Crypt.encrypt();
    }
}
变量声明代码:

public static boolean encrypt;
public static java.io.File file;
文件读取代码:

public static void encrypt() {
    System.out.println(MainUI.file);
    try {
        Scanner filescan = new Scanner(MainUI.file);
        int count = 0;
        while (filescan.hasNextLine()) {
            count++;
            filescan.nextLine();
        }
    } catch (FileNotFoundException e) {
        System.out.println("File not found!");
    }
}
当我运行这段代码时,我会得到一个
NullPointerException
,因为文件读取代码运行时文件变量的值为null。这是因为它在变量声明代码中声明为静态,这将覆盖在方法
actionEncrypt
中声明的值。如果我不将变量设为静态,当我试图从另一个类访问它时,会得到一个
找不到符号的
。但是,我不能在方法
actionEncrypt
中将变量声明为静态变量,因为它给了我表达式的
非法开始。有人知道如何在不隐藏字段的情况下将方法中的变量声明为静态变量,或者知道如何在其他类中使用文件变量吗

提前感谢,


圣地亚哥

我想我看到了你代码中的错误

更改以下行,以便改为初始化
MainUI.file
。当前,您正在创建一个名为
file
的局部变量,并初始化该变量,而不是您可能打算初始化的
MainUI.file

    java.io.File file = selectFile.getSelectedFile();
替换为

    MainUI.file = selectFile.getSelectedFile();

“变量必须是静态的,才能从其他类访问。”
——这是错误的,所以非常错误。您的变量绝对不应该是静态的。我并不是说永远不应该使用静态变量,事实上,在很多情况下,静态变量非常有用,但我是说,这不是其中之一。相反,如果它必须可以从其他类中访问,将它变成一个实例变量,并考虑给这个类一个吸气剂方法。给我们展示更多的代码,我们将告诉你如何重新排列它,这样你就不需要使用<代码>静态< /代码>变量,或者确保初始化发生在第一。@充满了鳗鱼的气垫船-对不起,我说得不对。我的意思是,在这些特殊情况下,变量必须是静态的,否则在尝试从encryption类访问它时,我会得到一个
找不到符号。我用更精确的措辞编辑了这个问题。听起来你在使用类
MainUI
,而没有实例化它。在这种情况下,在加密代码调用变量
文件之前,您应该在MainUI中有一些初始化变量
文件的代码。如何初始化变量
文件
?当它被设置为所选文件时,它不是已经初始化了吗?所以我假设我将替换代码添加到加密类中?@Santiago,删除第一行,并将第二行放在第一行原来所在的位置。确定。我试着把它放在两个类中,两个类都有效。谢谢你的帮助!