Autor Tema: Non-static variable cannot be referenced from a static context Java error cómo  (Leído 631 veces)

Javzzama

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola, tengo este error que me aparece <<Non-static variable cannot be referenced from a static context java>> en este código. Ya intenté varias cosas pero ninguna sirvió, ¿me podrian ayudar?

Código: [Seleccionar]
public class EjemploHilos {

    public static void main(String[] args) {
       
        HiloA a=new HiloA();
        HiloB b=new HiloB();
        HiloC c=new HiloC();
       
        Thread hilo1=new Thread(a);
        Thread hilo2=new Thread(b);
        Thread hilo3=new Thread(c);
       
        hilo1.start();
        hilo2.start();
        hilo3.start();
    }

    public class HiloA implements Runnable{
        public HiloA() {}
        public void run(){
            System.out.println("Se ejecuta Hilo A");
            System.out.println("sigo 1 en Hilo A");
            System.out.println("informacion del hilo 1;\n"+Thread.currentThread());
    try{
        Thread.sleep(400);
    }
    catch(InterruptedException e){
        e.printStackTrace();
    }
            System.out.println("sigo 2 en Hilo A");
        }
    }

    public class HiloB implements Runnable{
        public HiloB() {}
        public void run(){
            System.out.println("Se ejecuta Hilo B");
           try{
              Thread.sleep(400);
           }
           catch(InterruptedException e){
        e.printStackTrace();
    }
            System.out.println("sigo 1 en Hilo B");
            System.out.println("informacion del hilo 2;\n"+Thread.currentThread());
            System.out.println("sigo 2 en Hilo B");
        }
    }

    public class HiloC implements Runnable{
        public HiloC() {}
        public void run(){
            System.out.println("Se ejecuta Hilo C");
             System.out.println("sigo 1 en Hilo C");
            System.out.println("informacion del hilo 3;\n"+Thread.currentThread());
        try{
            Thread.sleep(400);
        }
           catch(InterruptedException e){
        e.printStackTrace();
    }
            System.out.println("sigo 2 en Hilo ");   
        }
    }
   
}
« Última modificación: 25 de Octubre 2020, 21:00 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 725
    • Ver Perfil
Re:Non-static variable cannot be referenced from a static context java
« Respuesta #1 en: 01 de Mayo 2020, 17:10 »
Es habitual liarse con el tema del contexto estático y "no estático".

El método main, que pertenece a tu clase EjemploHilos, es estático:

Citar
public static void main(String[] args)

Esto implica dos cosas:
1- No es necesario instanciar un objeto de la clase EjemploHilos para poder ejecutar este método main. Precisamente por eso los main son siempre estáticos.

2- Al ser un método que está en un "contexto estático" no puede acceder a variables, métodos, clases... que no estén también en un contexto estático.

Y este es el problema que tienes. Las clases internas HiloA, HiloA , etc... no son estáticas, así que el main no puede acceder a ellas.

¿Cómo solucionarlo? Lo más directo y sencillo, es declarar todas esas clases también como estáticas. Y asunto resuelto.

Citar
public static class HiloA implements Runnable{
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Javzzama

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re:Non-static variable cannot be referenced from a static context java
« Respuesta #2 en: 01 de Mayo 2020, 17:55 »
Muchas gracias, en verdad me ayudó mucho. ;D
« Última modificación: 25 de Octubre 2020, 20:59 por Alex Rodríguez »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".