Pregunta

Muy novato Q sobre las clases de Javafx. Main es una clase inicial principal en Javafx, y no tiene constructor (no sé por qué)

Main.java

class Main extends Application {
   Log  log;   // class, not shown here
   Work work;
   @Override
   public void start() // entry point
   {
      log  = new Log("main.log"); // opens log file, need to be non-static
      work = new Work();
   }
}

Trabajo.java

class Work{
     public Work() // constructor
    {
       Main.log.write("Making work object");  // error
       // What is the right method to call one non-static class from another ???
    }
¿Fue útil?

Solución

prueba esto

class Main extends Application {
   public static Log  log = new Log("main.log");   // class, not shown here
   Work work;
   public start() // entry point
   {
       work = new Work();
   }
}

Entonces solo tú puedes usar

Main.log.write("Making work object");

Otros consejos

Pase el registro a la instancia de trabajo.

class Main extends Application {
   Log  log;   // class, not shown here
   Work work;
   public start() // entry point
   {
      log  = new Log("main.log"); // opens log file, need to be non-static
      work = new Work(log);
   }
}

== work.java ==

class Work{
    Log  log;
    public Work(Log log) // constructor
    {
       this.log = log;
       log.write("Making work object");           
    }

Su Log necesita ser public y static.

Solo cuando se declara algo public ¿Puedes acceder a él en otra clase (sin herencia, quiero decir)

y

Solo cuando se declara algo static ¿Puedes referirte a él como Classname.VariableName

class Main extends Application {
   public static Log  log; // see the change ?   
   ...
   public void start() // this needed a return type
   {
      ...
   }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top