好的,所以我有一个java文件正在加载另一个类,我希望java文件能够编辑和读取正在运行的类中的变量。
例如: 我有一个按钮,按下它时设置一个变量(这是类文件)。我希望加载此类的java文件能够看到变量的新值读取它,设置它并做任何需要的事情。我希望设置的新值显示在正在运行的java类中。
这是我到目前为止所尝试的,但是当我尝试编辑像获取baseX这样的值时,它并没有显示在正在运行的类上。此外,当我在运行类上执行操作时,baseX值应该更改,但是当我更改它们时,东西不会打印到屏幕上。好像反射不能在运行时读取内容。那是什么呢?
Class c = Class.forName("Client");
for (Method m : c.getMethods()) {
if (m.getName().contentEquals("main")) {
Object[] passedArgs = { args };
m.invoke(null, passedArgs);
}
}
Object instance = c.newInstance();
Field baseX = c.getField("baseX");
Field loggedIn = c.getField("loggedIn");
boolean gotValues = false;
while(!gotValues) {
boolean loggedin = loggedIn.getBoolean(instance);
if(loggedin) {
System.out.println(baseX.get(instance));
} else {
System.out.println(loggedin);
loggedIn.setBoolean(instance, true);
}
}
同样是的getter / setter方法如果在运行时工作就可以工作,我可以这样做,当按下按钮x时,变量y在屏幕上变化。什么是java bean?如果我只是想调用一个方法而不是获取值呢?或者如果我想添加自己的方法/代码怎么办?
答案 0 :(得分:0)
试试这个:
public class Client {
public Object baseX = new Object();
public boolean loggedIn;
}
-----
public class Main {
public static void main(String[] args) throws Exception {
Class c = Class.forName("Client");
/*for (Method m : c.getMethods()) {
if (m.getName().contentEquals("main")) {
Object[] passedArgs = {args};
m.invoke(null, passedArgs);
}
}*/
Object instance = c.newInstance();
Field baseX = c.getField("baseX");
Field loggedIn = c.getField("loggedIn");
boolean gotValues = false;
//while (!gotValues) {
boolean loggedin = loggedIn.getBoolean(instance);
if (loggedin) {
System.out.println("Logged in!");
System.out.println(baseX.get(instance));
}
else {
System.out.println("NOT Logged in!");
System.out.println(loggedin);
loggedIn.setBoolean(instance, true);
System.out.println(loggedIn.getBoolean(instance));
}
//}
}
}