Java 在类之间共享变量
我有一个问题,听起来很愚蠢,但不知道为什么它不起作用。我有两个类,Directory和Map,在Directory类中有一个本地字符串变量,它取目录的当前文件夹的名称,并希望将其放在Map类中显示图形的矩形中。将变量放入Map类后,问题是字符串为空 代码如下: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
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();
}
}