Pregunta sobre runtime, variables, java, class, reflection – Cargue una clase utilizando la reflexión y luego edite las variables durante el tiempo de ejecución

0

Bien, tengo un archivo java que está cargando otra clase y quiero que el archivo java pueda editar y leer variables de la clase que se está ejecutando.

Por ejemplo: tengo un botón que cuando se presiona establece una variable (este es el archivo de clase). Quiero que el archivo java que está cargando esta clase pueda ver el nuevo valor de la variable, leerlo, configurarlo y hacer lo que sea necesario. Y quiero que el nuevo valor que se establece se muestre en la clase Java en ejecución.

Esto es lo que he intentado hasta ahora, pero cuando trato de editar los valores como obtener baseX, no aparece en la clase en ejecución. Además, el valor de baseX debería cambiar cuando hago cosas en la clase en ejecución, pero las cosas no se imprimen en la pantalla cuando las cambio. Es como si la reflexión no pudiera leer cosas en tiempo de ejecución. Entonces, ¿qué hace?

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

Además, los métodos de obtención y configuración de sí sí funcionarían si funcionaran en tiempo de ejecución y podría hacerlo para que cuando se presione el botón x la variable y cambie en la pantalla. ¿Qué es un java? Además, ¿qué sucede si quisiera invocar un método y no obtener un valor? ¿O si quisiera agregar mis propios métodos / código?

¿Qué has probado y dónde está tu problema? Hasta ahora has dicho lo que quieres lograr. Jochen
Parece que quieres escribir un bean Java con algunos métodos de obtención y configuración :) paulsm4
Edité mis cosas. Ryan Glen

Tu respuesta

1   la respuesta
0

Prueba esto:

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

  }
}
¡Chico! No estás configurando el valor en "gotValues". Otro problema que puede tener es verificar si está ejecutando su programa desde dentro de un solo hilo. Y también una cosa más: usar el depurador! hades
Básicamente lo tengo así que cuando hago clic en iniciar sesión e inicio de sesión en el juego, me conecto pero cuando intento usar la reflexión para verificar el inicio de sesión. En booleano todavía dice que no estoy conectado, aunque lo estoy. Es como si no estuviera leyendo el programa que estoy ejecutando. Ryan Glen

Preguntas relacionadas