Java 从两个不同的类调用get/set静态操作

Java 从两个不同的类调用get/set静态操作,java,Java,我有三门课:调节、光度、测试 在Regulate类中,我通过调用setAttribute方法在类Luminosity中设置属性 然后在类测试中,我调用方法getAttribute 问题是,当我调用getAttribute方法时,我发现设置它的值不同 这是亮度等级 public class Luminosity{ public static int attribute; public static int getAttribute(){ return attribute

我有三门课:调节、光度、测试

在Regulate类中,我通过调用setAttribute方法在类Luminosity中设置属性

然后在类测试中,我调用方法getAttribute

问题是,当我调用getAttribute方法时,我发现设置它的值不同

这是亮度等级

public class Luminosity{

    public static int attribute;
public static int getAttribute(){

        return attribute;
    }
    public static void setAttribute(int v) {
        attribute=v;
        try {
                File fichier = new File("../../WorkspaceSCA/Lamp/value.txt");
                PrintWriter pw = new PrintWriter(new FileWriter(fichier)) ; 
                String ch=Integer.toString(attribute);
                pw.append(ch);
                pw.println();
                pw.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
该守则:

public class Regulate {
public static void main(String[] args) throws InterruptedException {
    Luminosity.setSensedValue(50));                     
System.out.println("Value of Luminosity= "+ Luminosity.getSensedValue());

    }           
}

这显示了:亮度值=50 现在,我想从另一个类(测试)中恢复此值,如下所示:

public class Test {

    public static void main(String[] args) throws InterruptedException {
                                        System.out.println("Value = "+ Luminosity.getSensedValue());

这显示:Value=0 我想恢复相同的值。
提前感谢

您将在两个不同的线程中启动两个不同的类。 当然亮度没有以前的值,它是在不同的JVM中设置的。 如果要设置属性并在两个线程之间传输,可以将其放置在文本文件中

public class Luminosity {
private static final String FILE_NAME = "attribute.txt";
private int attribute;

public void writeAttribute(int val) throws IOException {
    try (FileWriter fileWriter = new FileWriter(FILE_NAME)) {
        fileWriter.append("" + val);
        fileWriter.flush();
    }
    attribute = val;
}

public int readAttribute() throws IOException {
    StringBuilder sb = new StringBuilder();
    try (FileReader fileReader = new FileReader(FILE_NAME)) {
        int r;
        while (true) {
            char[] buffer = new char[100];
            r = fileReader.read(buffer);
            if (r == -1) break;
            sb.append(new String(Arrays.copyOf(buffer, r)));
        }
    } catch (FileNotFoundException e) {
        return 0;
    }
    if (sb.length() == 0) return 0;
    return Integer.parseInt(sb.toString());
}

public static void main(String[] args) throws IOException {
    Luminosity luminosity = new Luminosity();
    System.out.println("attribute after start: " + luminosity.readAttribute());
    luminosity.writeAttribute(50);
    System.out.println("new attribute: " + luminosity.readAttribute());
}

}

这不适用于运行在不同VM中的应用程序。正如Arnaud所述,由于有两个不同的主方法,因此有两个不同的VM,因此类Luminity有两个不同的“实例”。将测试调用移动到Regulate的主方法中,您将看到正确的output.JVM,即Java虚拟机。它是执行编译代码的工具。我会让你检查RMI,但如果你不知道什么是虚拟机,那可能会太早。问题是,你为什么在设置值时使用文件?我正在开发一个有点复杂的应用程序,为此我需要一个文件。我知道JVM(不是虚拟机)