HIlos: Tares en segundo plano

Ayudaaaaaa :( .

el la aplicacion que estoy desarrollando verifica las conecciones e implemente hilos para que el programa no se bloquera pero tengo problemas por que el ping me responde falso antes de que lo termine espero me puedan ayudar.

package Hilos;
******************************Este es el hilo
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class Ping extends Test implements Runnable {
public boolean  res1;
    public Ping(int ip) throws UnknownHostException, IOException, InterruptedException{
            System.out.println("Realizando Ping  a la direccion 192.168.0."+ip);
            InetAddress in = InetAddress.getByName("192.168.0." + ip);
            System.out.println(in.isReachable(ip));
    }
    public void run() {}
    }
***************************este el que llama al Hilo
package Hilos;

import java.io.IOException;
import java.net.UnknownHostException;

public class Test {
    public static void main(String args[]) throws UnknownHostException, IOException, InterruptedException{
        for (int i = 1; i < 10; i++) {
            Thread hr = new Thread(new Ping(i));
            hr.start();
        }
    }
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

run() vacío

El método run() no hace nada; el ping lo haces en el constructor de la clase Ping. Por lo tanto todos los pings se hacen en el hilo principal, en vez de cada ping en su propio hilo.

Imagen de kerinik

Sigo en las mismas :(

ya lo e cambiado al metodo run() y sigue haciendo lo mismo;

public class Ping extends Test implements Runnable {

    public int ip1;

    public Ping(int ip) {
        ip1 = ip;
        run();
    }

    public void run() {
        System.out.println("Realizando Ping  a la direccion 192.168.0." + ip1);
        InetAddress in = null;
        try {
            in = InetAddress.getByName("192.168.0." + ip1);
        } catch (UnknownHostException ex) {
            Logger.getLogger(Ping.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            System.out.println(in.isReachable(ip1));
        } catch (IOException ex) {
            Logger.getLogger(Ping.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Imagen de ezamudio

println()

El método println() me parece que hace un bloqueo sobre el System.out por lo que ahí se sincronizan los hilos (sólo uno a la vez puede imprimir eso en pantalla). Lo demás ya se debe hacer en distintos hilos (10 hilos, uno para cada ping). No entiendo cuál es el problema.

Imagen de rodrigo salado anaya

Hilos. Prueba esto...

Hola pruebas esto. Me dices como te fue ok :)

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runnable.html
http://java.sun.com/j2se/1.5.0/docs/api/java/net/InetAddress.html (checa tu 'isReachable')
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html (sutil diferencia entre 'run()' y 'start()')

package ping;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 *
 * @author Rodrigo Salado Anaya.
 */

public class Main {

    public static void main(String[] args) {
        String ip = "192.100.11.";
        for (int i = 0; i <= 255; i++) {
            new Ping(ip + i);
        }
    }
}

class Ping implements Runnable {

    private String ip;
    private Thread hilo;

    public Ping(String ip) {
        this.ip = ip;
        hilo = new Thread(this);
        hilo.setName("hiloPing-" + ip); // Puedes hacer un 'Profile' por ejemplo con NetBeans y ver como se comporto tu hilo.
        hilo.start();
    }

    public void run() {
        System.out.println("Buscando: " + ip);
        InetAddress in = null;
        try {
            in = InetAddress.getByName(ip);
            int timeOut = 15;
            if (in.isReachable(timeOut)) {
                System.out.println("Encontrada: " + ip + " :: [Ok]");
            } else {
                System.out.println("No encontrada: " + ip + " [Error]");
            }
        } catch (UnknownHostException ex) {
        } catch (IOException ex) {
        }
    }
}

Nota: Y ten cuidado usando run() y start(), uno lo coloca en el la fila del despachador y otro no.

Imagen de kerinik

Que buena solucion

Es precisamente lo que yo queria. Muchas gracias por su ayuda. Lo estudiare bien. pero me surge una duda. la clase que hace ping la mando llamar desde un formulario y quiero plasmarla en etiquetas. la clase ping hereda lo del formulario y al llamar el metodo en que cambia las etiquetas no hace nada. completa el metodo correctamente pero no cambia las etiquetas. y si mando llamar el metodo desde la misma clase se ejecuta correctamente.

Imagen de ezamudio

Swing?

Si lo estás haciendo con Swing, lee esto.

Imagen de rodrigo salado anaya

muy buen tutorial.

no había checado el tutoría, y esta buenisimo...

Imagen de kerinik

Muchas Gracias

Les Agradesco la ayudad que me han brindado esto de java si que es algo inmenso y sin personas como ustedes seria mas dificil aprenderlo xD Gracias ezamundio, gracias rodrigo.

Imagen de kerinik

Otraves Yo :D

me encontre con un buen tutorial en español sobre la concurrencia en java swing y todo me funciona muy bien solo que me surge una duda cuando corro el programa si hace el proceso sin bloquearme la aplicacion pero hace el proceso hilo por hilo y si lo pruevo en una maquina con java 1.5 me va perfecto respuesta de todas las maquinas en 20 segundos.