Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在类之间共享变量_Java_Class_Variables_Share - Fatal编程技术网

Java 在类之间共享变量

Java 在类之间共享变量,java,class,variables,share,Java,Class,Variables,Share,我有一个问题,听起来很愚蠢,但不知道为什么它不起作用。我有两个类,Directory和Map,在Directory类中有一个本地字符串变量,它取目录的当前文件夹的名称,并希望将其放在Map类中显示图形的矩形中。将变量放入Map类后,问题是字符串为空 代码如下: public class Directory { public static File directory; // the directory that we want to use public static Str

我有一个问题,听起来很愚蠢,但不知道为什么它不起作用。我有两个类,Directory和Map,在Directory类中有一个本地字符串变量,它取目录的当前文件夹的名称,并希望将其放在Map类中显示图形的矩形中。将变量放入Map类后,问题是字符串为空

代码如下:

public class Directory
{
    public static File directory;   // the directory that we want to use
    public static String dirName = directory.getName();
    public String test = "test";

    public Directory(File directory)
    {
        files = directory.listFiles();
    }    
}

public class Test extends JComponent
{
    Directory dir = new Directory(null);
    public Test()
    {
        JFrame frame = new JFrame("Test");
        frame.setSize(800,600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(this);
        frame.setVisible(true);

    }

    public void paintComponent(Graphics g)
    {
        super.paintComponents(g);

        g.setColor(Color.yellow);
        g.fillRect(10, 10, 100, 100);
        g.drawString(dir.tigka, 10, 20);
    }
}

您使用(null)实例化了一个目录对象,然后使用该实例设置字符串变量。空值通过是非常有意义的

Directory dir = new Directory(null);
String folderName = dir.folderName;

奇怪的问题和难以评估的答案,因为目标变化太大。。尽管如此,我还是忍不住投入了几美分(欧元!),因为我认为NPE的原因还没有被发现

我所指的代码是(以防在我写作时代码发生变化)

用空文件实例化看起来像是罪魁祸首。。。但从未到达:抛出的第一个NPE来自dirName的静态初始化,该初始化访问静态字段目录,该目录为。。嗯,零


编辑(从@Eristikos comment开始):删除静态类修饰符以与原始示例保持同步

这是我发现的一个新解决方案(我是初学者),用于为应用程序中的所有类维护一个中心的动态变量位置,而不管使用了多少次相同的变量,或者在何时何地使用它们。听起来它可能适用于解决方案


您的意思是Map.folderName为null还是为空?您在哪里检查它?这就是问题所在:java.lang.NullPointerException:String为null这不是真正的代码-您正在调用
新目录(null)
,但
目录
类只有一个无参数构造函数。您能发布真实代码并标记引发NullPointerException的行吗?请确保发布了SSCCE(请参阅)。这仍然不是SSCCE-目录构造函数中的“文件”指的是什么?但至少我们现在可以看到一个问题。您正在将
null
传递给构造函数,然后尝试调用该null引用上的
listFiles
,因此出现了NullPointerException。最新的代码更新包含一个目录类,其值为“public static”,即“String dirName”。使用“publicstatic”使其成为类变量,而不是实例变量。问题是您将它的值设置为实例变量的值,而实例变量在类加载时不存在。我真的很困惑你想在这里完成什么。类和实例变量的组合非常奇怪。将其设置为“publicstatic”肯定会在类之间共享它,但您对它进行了非常奇怪的初始化。我认为构造函数与变量无关。在我调用并使用它的主类中,我使用所需文件的路径。在上面的代码示例中,您是否希望“String folderName=dir.folderName;”将“String folderName=…”设置为“test”——因为这是目录构造函数中的内容?如果您的真实代码与示例代码不同,请发布真实代码。我不确定我是否理解你的问题。如果我发布所有代码,将会有一个问题,因为它超过一百行。我的问题是如何使用从类Dog到类Cat的局部变量。让我们忘掉剩下的代码。我们首先希望变量是公共的。在那之后?@Eristikos:试着将代码缩减到实际显示问题的最小数量。确保它已编译并给出与您看到的相同的错误。你发布的内容看起来不错,但显然还有其他事情在发生,否则你就不会有你所描述的问题。@Cameron:你发布的内容看起来不错。。。我不同意。你确定使一个类是静态的是有效的吗?netbeans中的编译器不接受它。@Eristikos-是,如果它是嵌套类。仅用于快速测试,以允许静态字段;-)将进行编辑,使其与原文保持一致,谢谢大家的提醒!
public /* static */ class Directory
{
    public static File directory;   // the directory that we want to use
    public static String dirName = directory.getName();
    public String test = "test";

    public Directory(File directory)
    {
        files = directory.listFiles();
    }    
}