"Unchecked or unsave Opertions"-Fehler beseitigen

Status
Nicht offen für weitere Antworten.

Tio

Mitglied
Hallo zusammen,

so, dies ist mein erster Beitrag hier und ich hoffe, ich hab das richtige Unterforung gewählt. Wenn nicht, kanns ja ein Mod noch verschieben :wink:

Zu meinem Problem: Ich hab mein Projekt in BlueJ erstellt und dort funktioniert alles. Jetzt hab ich es als Jar gespeichert und wollte es mittels Batchdatei starten. Dabei springt mir dann im Commander folgernder Fehler ins Auge:

Fehler hat gesagt.:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of Rnage: -1

Wie gesagt funktioniert in BlueJ alles wunderbar. Mein Javaversion ist übrigends 1.5.0_07.

Dann merkte ich aber, dass BlueJ doch einen Fehler wirft, den ich bisher für unwichtig hielt, weil es ja lief. Und zwar war es dir im Threadtitel "unchecked or unsave operations"-Fehler. Mittlerweile vermute ich, dass es daran liegt, dass die Jardatei nicht läuft. Aber ich bin mir nicht ganz sicher :bahnhof:

Nachdem ich google mal gefragt hab, hab ich auch einen Weg gefunden, wie man das umgehen kann. Das hab ich dann überall eingebaut, aber in einer Klasse muss noch was sein, was ich nicht finde. Ich bin langsam am Verzweifeln. Zumal ich mir noch nichteinmal gaz sicher bin, ob dieser Fehler dafür verantwortlich ist, dass mein Jardatei nicht läuft.

Wäre wirklich nett, wenn mir jmd. sagen kann, welche Zeilen in der Klasse noch den unckecked operations Fehler erzeugt.

Vielen DAnk schonmal im vorraus.

mfg
Tio

Code:
import java.util.LinkedList;
import java.util.ListIterator;

/**
 * Write a description of class EventQueue here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class EventQueue{

private LinkedList<Event> EventList;

public EventQueue(){     
    EventList = new LinkedList<Event>();
    }

public boolean hasMore(){
    if(EventList.size() == 0) return false;
    else return true;
}

public Event getFirst(){
    ListIterator it = EventList.listIterator();
    if(it.hasNext()){return (Event) it.next(); 
    }else{ return null;}
}

public void removeFirst(){
    
    ListIterator it = EventList.listIterator();
    Event dummy;
    if(it.hasNext()){dummy = (Event) it.next(); 
    }else{ dummy = null;}
    it.remove();
}


//ordnet das event nach der zeit in die schlange ein
public void add(Event e){
    boolean go = true;
    if (EventList.size() == 0){EventList.add(e);
    }else{
            ListIterator it = EventList.listIterator();          
            while(go && it.hasNext()){
                Event dummy = (Event) it.next();
                if((dummy.getTime() == e.getTime())&&(dummy.getSignal() == e.getSignal())){
                    it.remove();
                    it.add(e);
                }else{    
                    if (dummy.getTime()>e.getTime()){
                                go = false;
                                it.previous();
                                it.add(e);
                            }
                    }
               }
                //Eventqueue fertig durchlaufen und noch nciht eingefügt? dann jetzt:
                if(go){ EventList.add(e);}
    }        
}     
}
 

Tio

Mitglied
Muss ich das einzeln abtippen, oder gibts ne Möglichkeit, das zu kopieren?

In dem File oben hab ich übrigends Zeile 13 und 16 angepasst. Aber ein Iterator kann doch so einen Fehler nicht erzeugen, oder?
 

Tellerrand

Bekanntes Mitglied
Code:
                    if (dummy.getTime()>e.getTime()){
                                go = false;
                                it.previous();
                                it.add(e);
                            }
                    }
An der Stelle dürftest du in manchen Fällen durch it.previous() den Index -1 erreichen und der ist ungültig.
 

Tio

Mitglied
Tellerrand hat gesagt.:
Code:
                    if (dummy.getTime()>e.getTime()){
                                go = false;
                                it.previous();
                                it.add(e);
                            }
                    }
An der Stelle dürftest du in manchen Fällen durch it.previous() den Index -1 erreichen und der ist ungültig.

Eigentlich nicht, weil ich das Event einfach nur adde, wenn die Eventlist 0 Elemente hat (Zeile 43). Aber ich werd nochmal genau drüber nachdenken, was passiert, wenn die Eventlist nur 1 Event beinhaltet. Trotzdem sollte es stimmen, weil das gesamte Programm mit allen möglichen Beispielen in BlueJ funktioniert.

Ich hab auch schnell die eine Zeile mal umgeändert:
Code:
if (it.hasPrevious()) it.previous();

selber fehler.

Zur Fehlermeldung im Commander:


Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of Rnage: -1

at java.lang.String.substring(Unknown Source)
(gleiche Zeile nochmal, warum?)
at LauyoutManager.ausgabe(LauyoutManger.java:70)
at DateiSimulator.(init)(Dateisimulator.java:31)
at DateiSimulator.main(Dateisimulator.java:64)

so, das wars. Ich versteh aber nicht, wieso es ein Fehler mit einem String sein soll, wenn in BlueJ doch alles funktioniert? :bahnhof:

edit: es sollte eigentlich auch mit einem Elemt in der Liste funktionieren. Wir holen das erste Element und der iterator steht danach auf 1. Dann merken wir, dass das einzufügende Element vor das erste Element mus, also gehenwir einen Schritt zurück, der Iterator steht dann auf 0, und fügen es ein mit add. DAs eingefügte Elemtent ist dann genau vor dem ersten Element. Sollte doch hinhauen...
 

Tellerrand

Bekanntes Mitglied
OMG, klar das ist ja auch eine StringIndex Exception :autsch:
Das hat nun jedenfalls nichtsmehr mit deiner EventQueue zu tun.


Der Stack Trace sieht aber auch komisch aus, da hilft nur durchklicken und schauen welche Codestellen die Exception passiert.
 

Tio

Mitglied
Tellerrand hat gesagt.:
OMG, klar das ist ja auch eine StringIndex Exception :autsch:
Das hat nun jedenfalls nichtsmehr mit deiner EventQueue zu tun.


Der Stack Trace sieht aber auch komisch aus, da hilft nur durchklicken und schauen welche Codestellen die Exception passiert.
Kannst du es bitte so erklären, dass ich was verstehe?

So wie ich das jetzt verstanden hab, tue ich bei einem String irgendwann auf Elemente außerhalb das Stringindex zugreifen. DAs geht natürlich net, ist klar. Aber wieso funktioniert es in BlueJ? Es ist 100%ig das selbe wie die JAr datei. Die tue ich ja immer neu erstellen...
 

Tio

Mitglied
Beni hat gesagt.:
Besonders den LayoutManager solltest du dir genauer anschauen, oder mal hier zeigen:
at LauyoutManager.ausgabe(LauyoutManger.java:70)

jap, du ahst recht, daran liegts. Ich benutzt da Substring mit nem festen Index... Muss ich mir mal genau anschauen.

Trotzdem würde mich mal interessieren, welche unsaved operations in der File im ersten Post noch vorhanden sind? :bahnhof:
 

Tio

Mitglied
Ok, ich hab das Problem eingekreist, bin aber grad total ratlos...

Code:
ListIterator it = Reihenfolge.listIterator();
            String Output = "Time    ";
            while(it.hasNext()){
                String str = (String) it.next();
                Output = Output + str + "   ";
            }
            //System.out.println(Output);
            write(Output);

Das ganze ist übrigends ein logic simulator. Aus der LinkedList Reihenfolge hole ich mir die Namen der Signale, die am Eingang und Ausgang liegen. Die Namen werden mit ein paar Leerzeichen verknüpft und an den String Output drangehangen. Das klappt auch ganz gut, zumindest in BlueJ.

Der String Output hat vor der Schleife übrigends den Wert Output="Time ". Die paar Leerzeichen sind beabsichtigt, wegen der Übersichtlichkeit.

Wenn ich das ganze mit meiner Batchdatei dann starte, wird aber nur "Time " ausgegeben, als ob er die Whileschliefe ignoriert. Das kann aber net sein, weil ich in BlueJ den komplette String erhalte, der da lautet "Time a b cin s cout ". Das einzig positive ist, das es keine Fehlermeldung im Commander gibt. Dafür versteh ich absolut nicht, wieso er mir die Strings nicht verknüpft.

Evtl. könnt ihr mir helfen, ich bin absolut ratlos :bahnhof:
 
B

Beni

Gast
Lass dir dochmal die Grösse der Liste ausgeben ("System.out.println( Reihenfolge.size() )").

Wenn sie 0 ist, wird die Liste nie gefüllt. Ansonsten werden lauter leere Strings reingeschrieben.

Da hier niemand genug Quellcode hat, um das Programm auszuführen, ist es schwierig, bessere Tipps zu geben.
 

Tio

Mitglied
Beni hat gesagt.:
Lass dir dochmal die Grösse der Liste ausgeben ("System.out.println( Reihenfolge.size() )").

Wenn sie 0 ist, wird die Liste nie gefüllt. Ansonsten werden lauter leere Strings reingeschrieben.

Da hier niemand genug Quellcode hat, um das Programm auszuführen, ist es schwierig, bessere Tipps zu geben.

joa, danke für den Tip, hattest recht, es war 0. Und ich weiß jetzt auch warum. Mein Programm konnte die Dateien nicht lesen,w eil sie in der Jar waren. Die müssen zwar im selben Ordner sein, aber nicht in der Jar. Das soll mal einer wissen. Zumal ja BlueJ den gesamten Ordner in die Jar packt, da denkt man ja, dass es klappen müsste. Und bevor die Fragen kmmen, nein ich hatte noch keine weiter Exceptions beim Dateilesen eingebaut :oops:

Naja, ich bin froh, dass es jetzt endlich klappt. Danke nochmal an alle, die mir geholfen haben. :D

Aber warum im ersten Post noch eine uncheked oder unsave opertion drin ist, weiß ach keiner, oder?
 

Leroy42

Top Contributor
Tio hat gesagt.:
Aber warum im ersten Post noch eine uncheked oder unsave opertion drin ist, weiß ach keiner, oder?

Es wäre hilfreich wenn du uns gepostet hättest in welcher Zeile die unchecked Operation ist.

:(

Auf Verdacht rate ich einfach mal die Benutzung des ListIterators ohne generischen Datentyp. ???:L
 

L-ectron-X

Gesperrter Benutzer
Tio hat gesagt.:
Aber warum im ersten Post noch eine uncheked oder unsave opertion drin ist, weiß ach keiner, oder?
Seit Java 1.5 ist es möglich, typsichere Collections zu entwerfen. Das heißt, der Programmierer kann mit Hilfe von Generics, einem neuen Sprachmittel, typsichere Behälter (Collection) für Objekte eines bestimmten Typs erzeugen.
Die Benutzung dieses Sprachmittels ist nicht Pflicht, dennoch werden Meldungen ausgegeben, die vor unsicheren Operationen auf den Collections warnen. Sofern sich daraus keine Fehler ergeben, können diese Warnungen ignoriert werden.
 

L-ectron-X

Gesperrter Benutzer
Um diese Warnmeldungen nun zu eliminieren, kannst du mit Generics arbeiten, oder den Compiler mit einer Option anweisen, die Warnungen zu ignorieren.

-Xlint:unchecked
 

Tio

Mitglied
Leroy42 hat gesagt.:
Tio hat gesagt.:
Aber warum im ersten Post noch eine uncheked oder unsave opertion drin ist, weiß ach keiner, oder?

Es wäre hilfreich wenn du uns gepostet hättest in welcher Zeile die unchecked Operation ist.

:(

Auf Verdacht rate ich einfach mal die Benutzung des ListIterators ohne generischen Datentyp. ???:L

das spuckt mir BlueJ eben nicht aus :?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
MiMa Was bedeutet unchecked or unsafe operations? Java Basics - Anfänger-Themen 6
O unchecked Exception Java Basics - Anfänger-Themen 4
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
R Note: uses unchecked or unsafe operations Java Basics - Anfänger-Themen 4
B Datentypen Casts typesafe machen? ("unchecked") Java Basics - Anfänger-Themen 10
N Generic clonen => eclipse empfiehlt @SuppressWarnings("unchecked") Java Basics - Anfänger-Themen 2
H Warning: unchecked Java Basics - Anfänger-Themen 5
D Wie "unchecked cast" hier vermeiden? Java Basics - Anfänger-Themen 2
M Generics - "Unchecked cast"-Warnung wegbekommen Java Basics - Anfänger-Themen 4
A Unterschied zwischen Checked und unchecked Exception Java Basics - Anfänger-Themen 3
S ArrayList<Element> - "unchecked or unsafe operati Java Basics - Anfänger-Themen 13
P unchecked conversion to conform to Comparator Java Basics - Anfänger-Themen 3
C Unchecked Call? Wie Warnung beseitigen? Java Basics - Anfänger-Themen 3
G Frage zu: @SuppressWarnings("unchecked") Java Basics - Anfänger-Themen 4
S "Unchecked Cast" Warnung Java Basics - Anfänger-Themen 3
G hashtable und unsafe, unchecked Code Java Basics - Anfänger-Themen 3
S Fehlermeldung: uses unchecked or unsafe operations ? Java Basics - Anfänger-Themen 6
D Vector - unchecked Java Basics - Anfänger-Themen 8
J unsave signed&unsigned Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben