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

また、ゲッター/セッター メソッドは実行時に動作する場合に動作し、ボタン x が押されると変数 y が画面上で変化するようにすることができます。Java Bean とは また、メソッドを呼び出すだけで、値を取得したくない場合はどうすればよいでしょうか? または、独自のメソッド/コードを追加したい場合はどうすればよいですか?

4

1 に答える 1

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

  }
}
于 2012-07-09T07:32:13.343 に答える