2012-07-08 44 views
0

好吧,所以我有一个加载另一个类的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?另外,如果我只想调用一个方法而没有获得价值呢?或者如果我想添加自己的方法/代码呢?

+1

你尝试过什么哪里是你的问题?到目前为止,你刚刚说明了你想达到的目标。 – Jochen 2012-07-08 23:14:35

+3

听起来像你想用一些getter和setter方法写一个Java bean :) – paulsm4 2012-07-08 23:15:17

+0

编辑我的东西。 – 2012-07-08 23:32:50

回答

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)); 
     } 
    //} 

    } 
} 
+0

基本上我拥有它,所以当我点击登录并登录游戏时,它记录了我,但是当我尝试使用反射来检查loggedIn布尔值时,它仍然说我没有登录,即使我是。就好像它没有阅读正在运行的程序。 – 2012-07-09 19:21:10

+0

家伙!您没有为“gotValues”设置价值。另一个问题,你可以检查,无论你是从单线程内运行你的程序。还有一件事:使用调试器! – hades 2012-07-12 17:47:07

相关问题