这使我的程序冻结

时间:2012-01-28 10:07:50

标签: java

每次开始我的程序冻结,我都无法弄明白为什么。 它没有任何错误,只是冻结。

我是否有可能创造出某种无限循环?

public  static String[] DataVoorList(int coureur) throws SQLException{

    ArrayList datalijst = new ArrayList();
        String query = ""
                + "SELECT rd_datum, rd_locatie, rd_code "
                + "FROM racedag WHERE rd_code in( "
                + "SELECT i_rd_code "
                + "FROM inschrijvingen "
                + "WHERE i_c_nummer = " + coureur + ");";
        ResultSet rs = Database.executeSelectQuery(query);

        int i=0;
        while (rs.next()){
            String datum = rs.getString("rd_datum");
            String locatie = rs.getString("rd_locatie");
            String totaal = "" + datum + " - " + locatie;
            datalijst.add(i, totaal);
            i++;
            int codeInt = rs.getInt("rd_code");
            String code = ""+codeInt;
            datalijst.add(i, code);
            i++;
        }



    return Race.StringDataVoorList(datalijst);
}

public static String[] StringDataVoorList(ArrayList invoer){
    int lengte = invoer.size();
    String[] uitvoer = new String[lengte];
    int i =0;
    while (i < uitvoer.length){
        uitvoer[i] = ""+invoer.get(i);
    }
    return uitvoer;
}
编辑:我已经解决了增量问题。但是,它仍然冻结。

编辑2:我认为我找到了问题(但我可能错了)

public static String[] DataVoorList(int coureur) throws SQLException {
    System.out.println("stap 1");
    ArrayList datalijst = new ArrayList();
    String query = ""
            + "SELECT rd_datum, rd_locatie, rd_code "
            + "FROM racedag WHERE rd_code in( "
            + "SELECT i_rd_code "
            + "FROM Inschrijvingen "
            + "WHERE i_c_nummer = " + coureur + ");";
    ResultSet rs = Database.executeSelectQuery(query);

    System.out.println("stap 2");
    int i = 0;
    while (rs.next()) {
        String datum = rs.getString("rd_datum");
        String locatie = rs.getString("rd_locatie");
        String totaal = "" + datum + " - " + locatie;
        datalijst.add(i, totaal);
        System.out.println("stap 3");
        i++;
        int codeInt = rs.getInt("rd_code");
        String code = "" + codeInt;
        datalijst.add(i, code);
        i++;
        System.out.println("stap 4");
    }
    return Race.StringDataVoorList(datalijst);

(我已将while循环更改为for循环)

    public static String[] StringDataVoorList(ArrayList invoer) {
    int lengte = invoer.size();
    String[] uitvoer = new String[lengte];

    for (int i = 0; i < uitvoer.length; i++) {
        uitvoer[i] = "" + invoer.get(i);

    }
    return uitvoer;
}
}

这是从这里打来的:

public MijnRacedagenScherm() throws SQLException{
    initComponents();
    int gebruiker = Inloggen.getNummer();
    String[] DataVoorList = Race.DataVoorList(2);
    int lengte = DataVoorList.length;
    System.out.println("resultaat is " + DataVoorList[0]);
    int i = 0;
    while (i < lengte) {
        ListRacedagenCoureur.setListData(DataVoorList);
        i = i + 2;
    }
    System.out.println("lengte is " + lengte);
}

这是一个新屏幕,但在上一个屏幕中,我得到了一个未报告的SQL异常

private void ButtonZienRacedagActionPerformed(java.awt.event.ActionEvent evt) {                                                  
new MijnRacedagenScherm().setVisible(true);
}                      

4 个答案:

答案 0 :(得分:6)

嗯,嗯......在本节中:

    while (i < uitvoer.length){
        uitvoer[i] = ""+invoer.get(i);
    }

i在哪里递增?

答案 1 :(得分:4)

确实是,这个

int i =0;
while (i < uitvoer.length){
    uitvoer[i] = ""+invoer.get(i);
}

你永远不会增加i

答案 2 :(得分:1)

如上所述,问题出在您的while循环中。 for循环更适合迭代索引数据类型

for (int i = 0; i < uitvoer.length; i++) {
    uitvoer[i] = ""+invoer.get(i);
}

答案 3 :(得分:0)

您要处理多少行?你追加字符串的方式很慢,也许它不再冻结,只需花费很长时间才能完成。