Java程序正在悬挂

时间:2015-01-29 15:28:33

标签: java swing

我编写了一个程序,接受数字并根据输入的数字生成表格。该程序最多可以处理4个数字但是当我尝试使用5的相同程序时,程序会挂起。 JFrame的截图。

http://i.imgur.com/pXuYCol.png(我没有足够的声誉来发布图片。)

按钮保持按下但程序的下一部分未执行,我无法点击任何其他按钮,也无法关闭窗口。

知道为什么会这样,以及如何避免这种情况?

编辑:这是按下按钮时应该执行的方法。

public void punnett5(final List<String> fin){
    JFrame gamFrame = new JFrame();

    Object row[][] = {};
    Object column[] = {};
    final DefaultTableModel model = new DefaultTableModel(row, column);

    JTable punnett = new JTable(model);

    for (int b = 0; b < 32; b ++){
        model.addColumn("");
    }

    String a1 = "", a2 = "", a3 = "", a4 = "", a5 = "";
    String[] rowData = new String[32];
    int a = 0, first = 0, second = 0, finale = 0;

    for(int b = 11111; b <= 22222; b += 10000){
        for(int c = b; c <= (Integer.parseInt(String.valueOf(c).substring(0,1)) * 10000) + 2222; c += 1000){
            for(int d = c; d <= (Integer.parseInt(String.valueOf(d).substring(0,1)) * 10000) +
                    (Integer.parseInt(String.valueOf(d).substring(1,2)) * 1000) + 222; d += 100){
                for(int e = d; e <= (Integer.parseInt(String.valueOf(e).substring(0,1)) * 10000) +
                        (Integer.parseInt(String.valueOf(e).substring(1,2)) * 1000) +
                        (Integer.parseInt(String.valueOf(e).substring(2,3)) * 100) + 22; d += 10){
                    for(int f = e; f <= (Integer.parseInt(String.valueOf(f).substring(0,1)) * 10000) +
                            (Integer.parseInt(String.valueOf(f).substring(1,2)) * 1000) +
                            (Integer.parseInt(String.valueOf(f).substring(2,3)) * 100)
                            + (Integer.parseInt(String.valueOf(f).substring(3,4)) * 10) + 2; d ++){
                        a = 0;
                        first = (Integer.parseInt(String.valueOf(f).substring(0,1)) * 1000000000) +
                                (Integer.parseInt(String.valueOf(f).substring(1,2)) * 10000000) +
                                (Integer.parseInt(String.valueOf(f).substring(2,3)) * 100000) +
                                (Integer.parseInt(String.valueOf(f).substring(3,4)) * 1000) +
                                (Integer.parseInt(String.valueOf(f).substring(4,5)) * 10);
                        for(int g = 11111; g <= 22222; g += 10000){
                            for(int h = g; h <= (Integer.parseInt(String.valueOf(h).substring(0,1)) * 10000) + 2222; h += 1000){
                                for(int i = h; i <= (Integer.parseInt(String.valueOf(i).substring(0,1)) * 10000) +
                                        (Integer.parseInt(String.valueOf(i).substring(1,2)) * 1000) + 222; i += 100){
                                    for(int j = i; j <= (Integer.parseInt(String.valueOf(j).substring(0,1)) * 10000) +
                                            (Integer.parseInt(String.valueOf(j).substring(1,2)) * 1000) +
                                            (Integer.parseInt(String.valueOf(j).substring(2,3)) * 100) + 22; j += 10){
                                        for(int k = j; k <= (Integer.parseInt(String.valueOf(k).substring(0,1)) * 10000) +
                                                (Integer.parseInt(String.valueOf(k).substring(1,2)) * 1000) +
                                                (Integer.parseInt(String.valueOf(k).substring(2,3)) * 100)
                                                + (Integer.parseInt(String.valueOf(k).substring(3,4)) * 10) + 2; k ++){
                                            second = (Integer.parseInt(String.valueOf(k).substring(0,1)) * 100000000) +
                                                    (Integer.parseInt(String.valueOf(k).substring(1,2)) * 1000000) +
                                                    (Integer.parseInt(String.valueOf(k).substring(2,3)) * 10000) +
                                                    (Integer.parseInt(String.valueOf(k).substring(3,4)) * 100) +
                                                    (Integer.parseInt(String.valueOf(k).substring(4,5)));

                                            finale = first + second;

                                            if ((Integer.parseInt(String.valueOf(finale).substring(0,2))) == 11){
                                                a1 = (fin.get(0) + fin.get(0)).toUpperCase();
                                            }
                                            if((Integer.parseInt(String.valueOf(finale).substring(0,2))) == 12 ||
                                                    (Integer.parseInt(String.valueOf(finale).substring(2,4))) == 21){
                                                a1 = fin.get(0) + fin.get(0).toLowerCase();
                                            }
                                            if ((Integer.parseInt(String.valueOf(finale).substring(0,2))) == 22){
                                                a1 = (fin.get(0) + fin.get(0)).toLowerCase();
                                            }

                                            if ((Integer.parseInt(String.valueOf(finale).substring(2,4))) == 11){
                                                a2 = (fin.get(1) + fin.get(1)).toUpperCase();
                                            }
                                            if((Integer.parseInt(String.valueOf(finale).substring(2,4))) == 12 ||
                                                    (Integer.parseInt(String.valueOf(finale).substring(2,4))) == 21){
                                                a2 = fin.get(1) + fin.get(1).toLowerCase();
                                            }
                                            if ((Integer.parseInt(String.valueOf(finale).substring(2,4))) == 22){
                                                a2 = (fin.get(1) + fin.get(1)).toLowerCase();
                                            }

                                            if ((Integer.parseInt(String.valueOf(finale).substring(4,6))) == 11){
                                                a3 = (fin.get(2) + fin.get(2)).toUpperCase();
                                            }
                                            if((Integer.parseInt(String.valueOf(finale).substring(4,6))) == 12 ||
                                                    (Integer.parseInt(String.valueOf(finale).substring(4,6))) == 21){
                                                a3 = fin.get(2) + fin.get(2).toLowerCase();
                                            }
                                            if ((Integer.parseInt(String.valueOf(finale).substring(4,6))) == 22){
                                                a3 = (fin.get(2) + fin.get(2)).toLowerCase();
                                            }

                                            if ((Integer.parseInt(String.valueOf(finale).substring(6,8))) == 11){
                                                a4 = (fin.get(3) + fin.get(3)).toUpperCase();
                                            }
                                            if((Integer.parseInt(String.valueOf(finale).substring(6,8))) == 12 ||
                                                    (Integer.parseInt(String.valueOf(finale).substring(6,8))) == 21){
                                                a4 = fin.get(3) + fin.get(3).toLowerCase();
                                            }
                                            if ((Integer.parseInt(String.valueOf(finale).substring(6,8))) == 22){
                                                a4 = (fin.get(3) + fin.get(3)).toLowerCase();
                                            }

                                            if ((Integer.parseInt(String.valueOf(finale).substring(8,10))) == 11){
                                                a5 = (fin.get(4) + fin.get(4)).toUpperCase();
                                            }
                                            if((Integer.parseInt(String.valueOf(finale).substring(8,10))) == 12 ||
                                                    (Integer.parseInt(String.valueOf(finale).substring(8,10))) == 21){
                                                a5 = fin.get(4) + fin.get(4).toLowerCase();
                                            }
                                            if ((Integer.parseInt(String.valueOf(finale).substring(8,10))) == 22){
                                                a5 = (fin.get(4) + fin.get(4)).toLowerCase();
                                            }
                                            rowData[a] = String.format(a1 + a2 + a3 + a4 + a5);
                                            a ++;

                                        }
                                    }
                                }
                            }
                        }

                        model.addRow(rowData);
                    }
                }
            }
        }
    }

    punnett.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);      
    JScrollPane pane = new JScrollPane(punnett, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    gamFrame.add(pane);

    gamFrame.setSize(1500,500);
    gamFrame.setTitle("Pentahybrid cross");
    gamFrame.setVisible(true);
}

这里的List fin是{“A”,“B”,“C”,“D”,“E”}

1 个答案:

答案 0 :(得分:1)

  • 部分 1 :( 可能的问题

你的代码需要很多......为主线程做了很多工作.. 尝试将此方法运行到另一个Thread中,以便按下和其他按钮。

您的程序滞后的主要原因是主线程正在尝试结束方法(您调用),直到它完成此操作它不响应任何事情。

  • 2 部分:( 线程示例

    调用这样的方法:(基本上你需要一个额外的线程来分享你的程序中的工作)

    new Thread(new Runnable(){
    
     public void run(){
    
    
    //Here i call The method i want();
    
    }}).start;
    

    或者你可以把线程作为你方法的主体 或者或者......

我使用 java swing ...

多次遇到这个问题

还有更多(如果您没有使用Threads添加注释,我将添加更多关于 java - Threads 的内容)。

如果这对您有用,请告诉我......

  • 部分 3 使用线程帮助+一个建议的解决方案

    有关如何使用线程的更多帮助(从初学者到超级)

    这些是一些很好的教程,可以获得完整的视图: First link

当然还有oracle文档,以便更好地理解.... oracle Threads

还可以使用您的代码尝试:

public void punnett5(final List<String> fin){

   new Thread(new Runnable(){

     public void run(){

       //Your Method here..

        JFrame gamFrame = new JFrame();

       Object row[][] = {};
       Object column[] = {};

        .......

       JScrollPane pane = new JScrollPane(punnett,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,   JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
gamFrame.add(pane);

gamFrame.setSize(1500,500);
gamFrame.setTitle("Pentahybrid cross");
gamFrame.setVisible(true);

    }}).start;

}