2012-01-28 28 views
0

每次啓動我的程序凍結,我不明白爲什麼。 它沒有給出任何錯誤,它只是凍結。這使我的程序凍結

是否有可能我創建了某種無限循環?

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); 
}      
+2

值'i'永遠不會在'while(i esaj 2012-01-28 10:10:24

+0

它仍然凍結?嘗試使用調試器來查找卡住的位置。或者添加一些打印語句來追蹤執行。 – Joni 2012-01-28 10:20:04

+0

您能告訴我們最新版本的代碼嗎? – cha0site 2012-01-28 10:32:54

回答

6

嗯,嗯......在本節:

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

哪裏i會增加嗎?

4

確實是這樣,這

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

你永遠不增加i

1

如上所述問題出在您的while循環中。 for循環更適合用於遍歷索引的數據類型

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

多少行,你處理?你追加字符串的方式非常緩慢,也許它不再凍結,而是需要很長時間才能完成。

+0

最多2行。 – Volupion 2012-01-28 10:24:25

+1

你能否更新代碼,以便我們現在可以看到你有什麼? – Joni 2012-01-28 10:26:23

+0

完成後,我也提供了一些信息。 – Volupion 2012-01-28 10:40:40