Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Javzzama en 01 de Mayo 2020, 04:28
-
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?
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 ");
}
}
}
-
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:
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.
public static class HiloA implements Runnable{
-
Muchas gracias, en verdad me ayudó mucho. ;D