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