Heyho zusammen 
Ich bin gerade daran, ein Programm von VB.Net auf Java umzuschreiben. Das schlussendliche Produkt ist ein Diagramm.
Die Daten für das Diagramm erhalte ich über eine Textdatei, welche ich zuvor einlese. Danach muss ich die Daten zurecht basteln, um sie verarbeiten zu können.
Und genau hier passiert der Fehler. Während der Laufzeit erhalte ich eine "StringIndexOutOfBoundsException", welche meiner Meinung nach merkwürdig ist, weil ich keinen Fehler sehen kann (auch nicht im Debugger).
Folgender Code:
Da Code alleine nicht ericht, werde ich kurz die wichtigsten Stellen erklären:
Auf Zeile 4: [JAVA=4]String[] input = fc.GetFileContentAsLines(pth);[/code] kriege ich mein eingelesenes Textfile als Array zurück.
Die eigentliche Arbeit fängt ab Zeile 24 an. Im "IF" lese ich solange die Textdatei ein, bis "Idx_FirstNumber" und "Idx_LastNumber" gesetzt sind. Danach komme ich in den "ELSE" Teil, und hier passiert der Fehler.
Lasse ich mein Programm laufen, stürzt das Programm erst auf Zeile 58 ab. Folgende Fehlermeldung:
StatsController.java:111 entspricht der Zeile 57 im Code oben.
Debugge ich nun, stürzt das Programm direkt auf Zeile 57 ab, mit der gleichen Fehlermeldung.
Die Werte während des debuggens sehen wie folgt aus:
lne = '_VXC_POLICY_ai_b0_cbw_vs_01 2 1 2 2 - - - - 1 1 1 1 1 1 1 1 '
idx_firstnumber = 31
Schlussendlich meine Frage:
Wieso stürzt das Programm auf dieser Zeile ab, wenn ich einen String kürzen will, welcher 127 Zeichen lang ist, ich jedoch nur die ersten 31 Zeichen abschneide? Sollte meiner Meinung nach funktionieren.
Erkentnisse von Analysen:
System:
Bin nun echt ratlos, bin seit zwei Tagen (Heute wirds der 3te) am debuggen und finde den Fehler einfach nicht.
Habe ebenfalls schon auf "stackoverflow.com" gepostet, jedoch haben die auch nicht weiter gewusst.
Ich hoffe das hier jemand meinen Fehler sieht und mir helfen kann.
Falls weitere Fragen sind (mehr Code, mehr Erklärungen, etc.), werde ich diese Informationen Saspo posten.
Jetzt schon vielen Dank für eure Hilfe, Greez Dancger
Ich bin gerade daran, ein Programm von VB.Net auf Java umzuschreiben. Das schlussendliche Produkt ist ein Diagramm.
Die Daten für das Diagramm erhalte ich über eine Textdatei, welche ich zuvor einlese. Danach muss ich die Daten zurecht basteln, um sie verarbeiten zu können.
Und genau hier passiert der Fehler. Während der Laufzeit erhalte ich eine "StringIndexOutOfBoundsException", welche meiner Meinung nach merkwürdig ist, weil ich keinen Fehler sehen kann (auch nicht im Debugger).
Folgender Code:
Java:
public boolean readdatafromfile(String pth){
//Textinhalt holen
String[] input = fc.GetFileContentAsLines(pth);
//Inhalt prüfen
if (input.length == 0){
return false;
}
//Aktuelle Daten löschen
datalist.clear();
//Aktuellen Pfad ändern
currentpath = pth;
System.out.println(currentpath);
//Variablen
int idx_firstnumber = 0;
int idx_lastnumber = 0;
boolean bl_readpolicies = false;
//Auslesen
for (int idx = 0; idx < input.length;idx++){
//Zeile bestimmen
lne = "";
lne = input[idx];
//Index oder Daten lesen
if (!bl_readpolicies){
//Index LastNumber lesen
if (lne.trim().contains("AVG")){
idx_lastnumber = (int) lne.substring(0, lne.indexOf("AVG")).length();
}
//Index FirstNumber lesen
if (lne.trim().startsWith("01")){ //contains
idx_firstnumber = (int) lne.substring(0,lne.indexOf("01")).length();
}
//Anfangspunkt suchen
if (lne.startsWith("----------")){
bl_readpolicies = true;
}
} else {
//Abbrechen wenn keine Daten mehr kommen
if (lne.trim() == ""){
break;
}
//Neue SpezialListe erstellen
String spl_name = (String) input[idx].substring(0, idx_firstnumber).trim();
SpecialList spl = new SpecialList(spl_name);
//Alle Einträge auslesen
for(int idx2 = idx_firstnumber; idx2 <= idx_lastnumber; idx+=3){
//Auslesen der ANzahl Stunden
String anzstd_string;
try {
anzstd_string = lne.substring(idx2, 2);
} catch (Exception e) {
break;
}
//Prüfen ob numerisch
try {
//Parsen
int anzstd = Integer.parseInt(anzstd_string);
//Überschritten / Standard
if (anzstd > 48){
spl.add(new SpecialListItem(anzstd,enm_valuetyp.limitexceeded));
} else {
spl.add(new SpecialListItem(anzstd,enm_valuetyp.standard));
}
} catch (Exception e) {
switch (anzstd_string){
case "-":
spl.add(new SpecialListItem(0,enm_valuetyp.error));
break;
case "":
spl.add(new SpecialListItem(0, enm_valuetyp.blank));
break;
case "*":
spl.add(new SpecialListItem(0,enm_valuetyp.unfinished));
break;
default:
System.out.println("Fail AnzStd: " + anzstd_string);
break;
}
}
}
//Daten einer Reihe hinzufügen
datalist.add(spl);
}
}
//Erfolgreiche Rückgabe
return true;
}
Da Code alleine nicht ericht, werde ich kurz die wichtigsten Stellen erklären:
Auf Zeile 4: [JAVA=4]String[] input = fc.GetFileContentAsLines(pth);[/code] kriege ich mein eingelesenes Textfile als Array zurück.
Die eigentliche Arbeit fängt ab Zeile 24 an. Im "IF" lese ich solange die Textdatei ein, bis "Idx_FirstNumber" und "Idx_LastNumber" gesetzt sind. Danach komme ich in den "ELSE" Teil, und hier passiert der Fehler.
Lasse ich mein Programm laufen, stürzt das Programm erst auf Zeile 58 ab. Folgende Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 31
at java.lang.String.substring(Unknown Source)
at business.StatsController.readdatafromfile(StatsController.java:111)
StatsController.java:111 entspricht der Zeile 57 im Code oben.
Debugge ich nun, stürzt das Programm direkt auf Zeile 57 ab, mit der gleichen Fehlermeldung.
Die Werte während des debuggens sehen wie folgt aus:
lne = '_VXC_POLICY_ai_b0_cbw_vs_01 2 1 2 2 - - - - 1 1 1 1 1 1 1 1 '
idx_firstnumber = 31
Schlussendlich meine Frage:
Wieso stürzt das Programm auf dieser Zeile ab, wenn ich einen String kürzen will, welcher 127 Zeichen lang ist, ich jedoch nur die ersten 31 Zeichen abschneide? Sollte meiner Meinung nach funktionieren.
Erkentnisse von Analysen:
- Ersetzte ich im Debugger manuell den Wert von der Variable 'lne' auf "aaa... (127 x 'a'), funktioniert alles
- Setze ich den Wert von 'idx_firstnumber' manuell auf 31, funktioniert ebenfalls alles
System:
- Windows 7 Enterprise 32b
- Installierte Java Versionen: JDK7u5, JRE6u35, JRE7u5, JDK6u34, JavaFX 2.1.1 und SDK davon
- Projektbiblitohek = Execution environment: JavaSE-1.7 (jre7)
Bin nun echt ratlos, bin seit zwei Tagen (Heute wirds der 3te) am debuggen und finde den Fehler einfach nicht.
Habe ebenfalls schon auf "stackoverflow.com" gepostet, jedoch haben die auch nicht weiter gewusst.
Ich hoffe das hier jemand meinen Fehler sieht und mir helfen kann.
Falls weitere Fragen sind (mehr Code, mehr Erklärungen, etc.), werde ich diese Informationen Saspo posten.
Jetzt schon vielen Dank für eure Hilfe, Greez Dancger
Zuletzt bearbeitet von einem Moderator: