Frage an variables, reflection, java, class, runtime – Laden Sie eine Klasse mit Reflection und bearbeiten Sie die Variablen zur Laufzeit

0

Okay, ich habe eine Java-Datei, die eine andere Klasse lädt, und ich möchte, dass die Java-Datei Variablen der laufenden Klasse bearbeiten und lesen kann.

Zum Beispiel: Ich habe eine Schaltfläche, die beim Drücken eine Variable setzt (Dies ist die Klassendatei). Ich möchte, dass die Java-Datei, die diese Klasse lädt, den neuen Wert der Variablen lesen, festlegen und alle erforderlichen Aktionen ausführen kann. Und ich möchte, dass der neue Wert in der laufenden Java-Klasse angezeigt wird.

Dies ist, was ich bis jetzt versucht habe, aber wenn ich versuche, die Werte wie baseX zu bearbeiten, wird es nicht in der laufenden Klasse angezeigt. Außerdem sollte sich der baseX-Wert ändern, wenn ich Aufgaben in der laufenden Klasse erledige, aber die Aufgaben werden nicht auf dem Bildschirm gedruckt, wenn ich sie ändere. Es ist, als könne Reflection zur Laufzeit nichts lesen. Also, was macht das?

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

Auch ja Getter / Setter-Methoden würden funktionieren, wenn sie zur Laufzeit arbeiten und ich könnte es so machen, dass sich beim Drücken der Taste x die Variable y auf dem Bildschirm ändert. Was ist eine Java-Bohne? Was ist auch, wenn ich nur eine Methode aufrufen und keinen Wert erhalten möchte? Oder was ist, wenn ich meine eigenen Methoden / Code hinzufügen wollte?

Was hast du probiert und wo ist dein Problem? Bisher haben Sie nur angegeben, was Sie erreichen möchten. Jochen
Klingt so, als ob Sie eine Java-Bean mit einigen Get- und Setter-Methoden schreiben möchten :) paulsm4
Hat meine Sachen bearbeitet. Ryan Glen

Deine Antwort

1   die antwort
0

Versuche dies:

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

  }
}
Kerl! Sie setzen den Wert nicht auf "gotValues". Ein weiteres Problem könnte sein, dass Sie prüfen müssen, ob Sie Ihr Programm innerhalb eines einzelnen Threads ausführen. Und noch eins: Benutze den Debugger! hades
Grundsätzlich habe ich es so, wenn ich auf Login klicke und mich ins Spiel einlogge. Es loggt mich ein, aber wenn ich versuche, Reflection zu verwenden, um den Booleschen Wert "eingeloggt" zu überprüfen, heißt es immer noch, dass ich nicht eingeloggt bin, obwohl ich angemeldet bin. Es ist, als würde es das laufende Programm nicht lesen. Ryan Glen

Verwandte Fragen