style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

SwingWorker Ayuda

Me encuentro con el siguiente problema, espero me puedan ayudar:
En la aplicacion me ejecuta correctamente el codigo en Java 6.17 pero en la nueva vercion los hilos me los ejecuta uno por uno
el codigo es el siguiente:

package MSwing;

import java.awt.Insets;
import java.net.InetAddress;
import javax.swing.JButton;
import javax.swing.SwingWorker;

public class botones extends javax.swing.JFrame {

    JButton[] boton;
    int nn;
    sw sw1;

    public botones() {
        initComponents();
        creabotones();
        inicio();
    }

    public void creabotones() {
        boton = new JButton[10];
        for (int i = 0; i < boton.length; i++) {
            boton[i] = new JButton("" + i);
            jPanel1.add(boton[i]);
            boton[i].setVisible(true);
            boton[i].setMargin(new Insets(1, 1, 1, 1));
            boton[i].setText("" + i);
        }
    }

    public void inicio() {
        for (int i = 0; i < boton.length; i++) {
            sw1 = new sw(boton, i);
            sw1.execute();
        }
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setLayout(new java.awt.GridLayout(3, 3));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new botones().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                    
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                  

    private class sw extends SwingWorker<JButton[], Object> {

        int ip;
        JButton[] bo;

        private sw(JButton[] boton, int i) {
            bo = boton;
            ip = i;
        }

        @Override
        protected JButton[] doInBackground() throws Exception {
            InetAddress in = InetAddress.getByName("192.168.0." + ip);

            System.out.println("192.168.0." + ip + " " + in.isReachable(3000));

            throw new UnsupportedOperationException("Not supported yet.");
        }
    }
}

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

Nueva versión

Y cuál es la nueva versión que estás usando? Java 6 ya tiene un SwingWorker nativo, Java 5 no lo tenía pero por ahí había una clase externa, pero solamente puedas usar una de las dos, tal vez por ahí venta la bronca?

Imagen de kerinik

Version

La version que uso es la 6.18 es por eso que estoy confundido. en la version 6.17 me corre perfecto. intente creando nuevos hilos pero de esa manera no me modifica la gui y no se si sea algun parametro de la clase. ya le busque en el docjava 6 y no encuentro nada.

Imagen de ezamudio

doInBackground() siquiera compila?

El método declara que devuelve un arreglo de JButton pero el método no tiene un return. Y eso es lo único que veo que se asemeje a un hilo...

Imagen de kerinik

Encontre la solucion

Leyendo un poco mas afondo descubri que el SwingWorker no se permite ejecutar dos veces al mismo tiempo y los pone en espera pero encontre la solucion muchas gracias. el doInBackground() se ejecuta automaticamente con execute()

dejo el codigo. espero le sirva a alguien mas.

package MSwing;

import java.awt.Color;
import java.awt.Insets;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;

public class botones extends javax.swing.JFrame {

    JButton[] boton;
    int nn;

    public botones() {
        initComponents();
        creabotones();
        inicio();
    }

    public void creabotones() {
        boton = new JButton[10];
        for (int i = 0; i < boton.length; i++) {
            boton[i] = new JButton("" + i);
            jPanel1.add(boton[i]);
            boton[i].setVisible(true);
            boton[i].setMargin(new Insets(1, 1, 1, 1));
            boton[i].setText("" + i);
        }
    }

    public void inicio() {
        for (int i = 0; i < boton.length; i++) {
            Thread tr = new Thread(new hilo(i));
            tr.start();
        }
    }

    public class hilo implements Runnable{
    private int nip;
        public hilo(int ip){
            nip = ip;
        }

        public void run() {
            InetAddress in = null;
            try {
                in = InetAddress.getByName("192.168.0." + nip);
            } catch (UnknownHostException ex) {
                Logger.getLogger(botones.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                if (in.isReachable(10000)) {boton[nip].setForeground(Color.GREEN);}
                else {boton[nip].setForeground(Color.RED);}
            } catch (IOException ex) {
                Logger.getLogger(botones.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setLayout(new java.awt.GridLayout(3, 3));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new botones().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                    
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                  

}

Imagen de rodrigo salado anaya

Felicidades

Felicidades kerinik, empezaste, con hilos si no mal recuerdo.. luego con swing, luego ... etc, bueno y a fin de cuentas resolviste tu duda por completo...

Y esta parte fue lo mejor de todo lo que escribiste "Leyendo un poco mas afondo descubri que...". nos leemos pronto va :)

Imagen de ezamudio

SwingWorker

Efectivamente, hay un sólo SwingWorker, el cual va encolando las tareas que le das y las ejecuta una tras otra, en un hilo separado, pero no maneja varios hilos. Por eso se me hacía extraño que hablabas de hilos y no había una sola mención de Thread en tu código, pero bueno ahora ya lo resolviste, y qué bueno que implementas Runnable y creas tus Threads con esos Runnable como target. Eso te permitirá después si necesitas usar un ThreadPool, usar tu misma clase para que se ejecute ahí sin tener que mover nada.

Imagen de JohnMcfly

class GroupLayout

Tengo un applet corriendo de maravilla usando el jdk 1.6 en adelante el problema es que tengo que utiilizar el 1.5 desgraciadamente como comentas para el 1.6 esta clase viene inmersa en el JDK y desafortunadamente para poder arreglar mi codigo es necesario hacer un backport del codigo que tengo, sabes que clase puedo utilizar o que es lo que puedo hacer para hacer mi codigo reutilizable y funciones con el JDK 1.5??? Salu2

Imagen de ezamudio

swingworker?

Si te refieres todavía al swingworker, creo que por ahí existe una versión de swingworker como biblioteca externa para 1.5 y tiene un nombre de paquete distinto. Es una bronca porque entonces necesitas compilar tu proyecto usando java 5 y esta versión de swingworker, en vez del que ya viene con java 6.

Imagen de JohnMcfly

Swingworker

si de hecho es lo que hago, de hecho habia visto una forma que era cambiar en la parte de inspeccion de netbeans, como viene en la sig pag.
http://edwin.baculsoft.com/2011/04/how-to-fix-netbeans-grouplayout-incom...
El problema es que yo no trabaje con una aplicación swing de escritorio, lo tengo todo en codigo sin aplicación swing y funciona con un aplet...
Necesito encontrar el nombre de esa clase, ya que no puedo depurar esos errores...
Si encuentro algo lo publico, igual por ahi tengo unos buenos codigos de firmado con llaves y varias cosillas asi que he visto en otros temas para eso de la facturacion electronica ya los estaré publicando, igual y si te acuerdas de esa SwingWorker comenbtas no bro... Salu2

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">