JFrame使用while循环冻结

时间:2013-02-20 06:07:53

标签: java swing while-loop queue event-dispatch-thread

我是这个论坛的新手,但我无法解决这个问题。 我有这段代码:

while (archivo.ready()) {
            iCont++;
            linea = archivo.readLine();
            if (tryParse(linea) == null) {
                ContribuyenteT<String> nuevoCont = new ContribuyenteT();
                nuevoCont.setDato(linea);
                wrSalida.println("EL CONTRIBUYENTE " + nuevoCont.getDato() + " HA INGRESADO A LA SALA DE ESPERA");
                nuevoCont.setID(iCont);
                wrSalida.println("SE HA ASIGNADO EL CODIGO " + nuevoCont.getID() + " AL CONTRIBUYENTE IDENTIFICADO COMO " + nuevoCont.getDato());
                NodoCT<String> nuevoNodo = new NodoCT();
                nuevoNodo.setContribuyente(nuevoCont);
                objSalaEspera.Push(nuevoNodo);
            }
            else {
                ContribuyenteT<Integer> nuevoCont = new ContribuyenteT();
                nuevoCont.setDato(Integer.parseInt(linea));
                wrSalida.println("EL CONTRIBUYENTE " + nuevoCont.getDato() + " HA INGRESADO A LA SALA DE ESPERA");
                nuevoCont.setID(iCont);
                wrSalida.println("SE HA ASIGNADO EL CODIGO " + nuevoCont.getID() + " AL CONTRIBUYENTE IDENTIFICADO COMO " + nuevoCont.getDato());
                NodoCT<Integer> nuevoNodo = new NodoCT();
                nuevoNodo.setContribuyente(nuevoCont);
                objSalaEspera.Push(nuevoNodo);
            }
        }
        System.gc();
        if (objSalaEspera.getCantidad() < 10) {
            objCaja1 = new ColaC();
            NodoCT Aux = objSalaEspera.Pop();
            while (Aux != null) {
                objCaja1.Push(Aux);
                wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 1");
                Aux = objSalaEspera.Pop();
            }
        }
        else {
            if (objSalaEspera.getCantidad() < 26) {
                objCaja1 = new ColaC();
                objCaja2 = new ColaC();
                NodoCT Aux = objSalaEspera.Pop();
                while (Aux != null) {
                    if (objCaja1.getCantidad() <= objCaja2.getCantidad()) {
                        objCaja1.Push(Aux);
                        wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 1");
                    }
                    else {
                        objCaja2.Push(Aux);
                        wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 2");
                    }
                    Aux = objSalaEspera.Pop();
                    JOptionPane.showMessageDialog(this, "Llega");
                }
            }
            else {
                if (objSalaEspera.getCantidad() < 41) {
                    objCaja1 = new ColaC();
                    objCaja2 = new ColaC();
                    objCaja3 = new ColaC();
                    NodoCT Aux = objSalaEspera.Pop();
                    while (Aux != null) {
                        if (objCaja1.getCantidad() <= objCaja2.getCantidad()) {
                            if (objCaja1.getCantidad() <= objCaja3.getCantidad()) {
                                objCaja1.Push(Aux);
                                wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 1");
                            }
                            else {
                                objCaja3.Push(Aux);
                                wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 3");
                            }
                        }
                        else {
                            if (objCaja2.getCantidad() <= objCaja3.getCantidad()) {
                                objCaja2.Push(Aux);
                                wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 2");
                            }
                            else {
                                objCaja3.Push(Aux);
                                wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 3");
                            }
                        }
                        Aux = objSalaEspera.Pop();
                        JOptionPane.showMessageDialog(this, "Llega");
                    }
                }
                else {
                    objCaja1 = new ColaC();
                    objCaja2 = new ColaC();
                    objCaja3 = new ColaC();
                    objCaja4 = new ColaC();
                    NodoCT Aux = objSalaEspera.Pop();
                    while (Aux != null) {
                        if (objCaja1.getCantidad() <= objCaja2.getCantidad()) {
                            if (objCaja1.getCantidad() <= objCaja3.getCantidad()) {
                                if (objCaja1.getCantidad() <= objCaja4.getCantidad()) {
                                    objCaja1.Push(Aux);
                                    wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 1");
                                }
                                else {
                                    objCaja4.Push(Aux);
                                    wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 4");
                                }
                            }
                            else {
                                if (objCaja3.getCantidad() <= objCaja4.getCantidad()) {
                                    objCaja3.Push(Aux);
                                    wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 3");
                                }
                                else {
                                    objCaja4.Push(Aux);
                                    wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 4");
                                }
                            }
                        }
                        else {
                            if (objCaja2.getCantidad() <= objCaja3.getCantidad()) {
                                if (objCaja2.getCantidad() <= objCaja4.getCantidad()) {
                                    objCaja2.Push(Aux);
                                    wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 2");
                                }
                                else {
                                    objCaja4.Push(Aux);
                                    wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 4");
                                }
                            }
                            else {
                                if (objCaja3.getCantidad() <= objCaja4.getCantidad()) {
                                    objCaja3.Push(Aux);
                                    wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 3");
                                }
                                else {
                                    objCaja4.Push(Aux);
                                    wrSalida.println("EL CONTRIBUYENTE " + Aux.getContribuyente().getID() + " SE HA ASIGNADO A LA CAJA 4");
                                }
                            }
                        }
                        Aux = objSalaEspera.Pop();
                        JOptionPane.showMessageDialog(this, "Llega");
                    }
                }
            }
        }

我在一个队列上执行普通弹出,然后将节点传递到另一个队列。 但是当我运行程序(在NetBeans中)时,它会在第4个弹出窗口停止并卡住 就好像会有一个无限循环。我的示例队列有9个节点,但我不知道为什么它会停止。我已尝试使用3个节点的队列,但它不会停止。 我的队列代码如下:

public class ColaC {

NodoCT Head;
short shCantidad;

public ColaC() {
    Head = null;
    shCantidad = 0;
}

public short getCantidad() {
    return shCantidad;
}

public void Push(NodoCT pNuevo) {
    shCantidad++;
    if (Head == null) {
        Head = pNuevo;
        Head.setSiguiente(null);
    }
    else {
        NodoCT Aux;
        Aux = Head;
        while (Aux.getSiguiente() != null) {
            Aux = Aux.getSiguiente();
        }
        Aux.setSiguiente(pNuevo);
    }
}

public NodoCT Pop() {
    if (Head != null) {
        NodoCT Aux = Head;
        Head = Head.getSiguiente();
        return Aux;
    }
    else {
        return null;
    }
}

所有这些都是用Java编程的。 我希望能够解释我的自我......我对Java有点新意,所以所有人都对它表示赞赏。顺便说一句,如果我的英语不好,那是因为我来自LatinAmeria,哈哈。 再次感谢。

我的节点代码是:

public class NodoCT<T> {

ContribuyenteT objContribuyente;
NodoCT Siguiente;

public NodoCT() {
    objContribuyente = null;
    Siguiente = null;
}

public void setSiguiente(NodoCT<T> pSiguiente) {
    Siguiente = pSiguiente;
}

public NodoCT getSiguiente() {
    return Siguiente;
}

public void setContribuyente(ContribuyenteT<T> pContribuyente) {
    objContribuyente = pContribuyente;
}

public ContribuyenteT<T> getContribuyente() {
    return objContribuyente;
}

}

0 个答案:

没有答案