Java String index out of range: -1 - Problem bei MediaPlayer

Tr3x

Lieutenant
Registriert
Feb. 2007
Beiträge
638
Hallo,

ich versuche gerade einen MediaPlayer zu basteln. Bisher lief alles recht gut. Nur jetzt häng ich einfach an den einfachen JUnitTests.
Und zwar habe ich ein AudioFile.java das eine methode parsePathname und parseFilename hat. In der ersten werden alle Slashes für das jeweilige OS richtig gestellt, und die doppelten entfernt. Bei meinen eigenen UnitTests gibts da noch kein Problem. In der zweiten Methode werden führende und endende Leerzeichen entfernt und Interpret und Titel jeweils getrennt gespeichert.

Das eigentliche Problem ist das bei dem UnitTest in Zeile 249 gemeckert wird mit
java.lang.StringIndexOutofBoundsException: String index out of range: -1

Ich versuch die ganze Zeit alles auszutesten und rumzubasteln aber ich kann den Fehler einfach nicht finden. Ich hoffe es kann mir da jemand behilflich sein.

VIELEN DANK

Am besten ich füg hier einmal den AudioFile.java code hoch
Code:
public class AudioFile {

    private String pathname, filename, author, title;

    public AudioFile(String pathname) {
        
            parsePathname(pathname);
            parseFilename(getFilename());      
            
        }
    
    public AudioFile() {   
    }
    
    public void parsePathname(String pname) {

        pathname = pname;
        filename = "";
        int slash, mem = 0;
        char os = java.io.File.separatorChar;
        String pname2 = "";
  

//slashes drehen
        if(os == '\\'){
           //windows
            pname = pname.replace('/', '\\');
        }
        else {
           //unix
            pname = pname.replace('\\', '/');
        }
  
//doppeltenslashes entfernen
        if(os == '\\') {
            //windows
            for(int i=0; i<pname.length();i++) {
                if(pname.charAt(i) == '\\') {
                    if(mem == 0) {
                        pname2 += pname.charAt(i);
                        mem = 1;
                    }
                    else { mem = 1;     
                    }
                }
                else {
                    pname2 += pname.charAt(i);
                    mem = 0;
                }
            }

            if(pname2.contains("\\")) {
                slash = pname2.lastIndexOf('\\');
                slash +=1;
                
                this.filename = pname2.substring(pname2.lastIndexOf(java.io.File.separator)+1);
            }
            else {
                this.filename = pname2;
               
                 }
           
        }
        else {
          //unix
            for(int i=0; i<pname.length();i++) {
                if(pname.charAt(i) == '/') {
                    if(mem == 0) {
                        pname2 += pname.charAt(i);
                        mem = 1;
                    }
                    else { mem = 1;     
                    }
                }
                else {
                    pname2 += pname.charAt(i);
                    mem = 0;
                }
            }

            if(pname2.contains("/")) {
                slash = pname2.lastIndexOf('/');
                slash +=1;
                this.filename = pname2.substring(pname2.lastIndexOf(java.io.File.separator)+1);

            }
            else {
                this.filename = pname2;
            }

        }
        System.out.println(filename);
        this.pathname = pname2;
        return;
    }
    
    public String getPathname() {
        return pathname;
    }

    public String getFilename() {
        return filename;
    }

    public void parseFilename(String filename) {
        

       int i = filename.length();
       if(i>0) {
           if(filename.contains(" - ")){
            String[] split = filename.split(" - ");
           
            author = split[0];
            author = author.trim();
            
            
            title = split[1];
            title = split[1].substring(0, split[1].lastIndexOf("."));
            title = title.trim();
            }
           else {
               this.author = "";
               if(filename.contains(" - ")){
                   this.author = "";
                   this.title = "";
               }
               else 
                   if(filename.contains(".")) {
                   title = filename.substring(0, filename.lastIndexOf(".")).trim();
                   }
                   else {
                       title = filename.trim();
                   }

           }
           
       }
       else {
         title = "";
         author = "";
       }
        return;
    }

    public String getAuthor() {
        return author;
    }

    public String getTitle() {
        return title;
    }

    public String toString() {
        if (author.equals("")) {
            return getTitle();
        }
        else {
            return getAuthor() + " - " + getTitle();
        }
    }
}

und das hier ist der zubestehende JUnitTest code
Code:
// We still use the Junit 3 framework since the APA server is not yet migrated to JUnit 4
// This is the version that runs on the PCs.
//
// It provides the facility to emulate a different OS and enables the developer
// to check the behavior of the test code on platforms different from the
// developers platform.
// The facility is convenient to check the normalization of pathnames with respect to
// '/' and '\'
//
// The behavior is defined within the method setUp() below.
//
// Note: at the APA server we are running the linux emulation!
// 
import junit.framework.TestCase;

public class AudioFileTest extends TestCase {

    private static char sep;

    private static String root = "/";

    private static String pathNames[];

    private static String expectedPathNames[];

    private static String expectedFileNames[];

    private static String authors[];

    private static String titles[];

    private static String toStrings[];

    public void setUp() {
        try {
            // Activate exactly one the following lines
            // in order to define the emulation you like
            // Usually, the first line (no emulation) is active
            //
            EmulateOtherOs.reset(); // no emulation
            // EmulateOtherOs.emulateWindows();
            // EmulateOtherOs.emulateLinux();
            // EmulateOtherOs.emulateMac();
        } catch (Exception e) {
            e.printStackTrace();
        }
        sep = java.io.File.separatorChar;
        String osname = System.getProperty("os.name");
        if (osname.toLowerCase().indexOf("win") >= 0)
            root = "C:" + sep;

        // This array contains the arguments we feed to method parsePathname()
        pathNames = new String[] {
                root + "home" + sep + "meier" + sep + "Musik" + sep + "Falco - Rock Me Amadeus.mp3",
                root + "home" + sep + "db-admin" + sep + "Frankie Goes To Hollywood - The Power Of Love.ogg",
                root + "tmp" + sep + "Deep Purple - Smoke On The Water.wav",
                root + "my-tmp" + sep + "file.mp3",
                "Falco - Rock Me Amadeus.mp3",
                "file.mp3",
                ".." + sep + "music" + sep + "audiofile.au",
                "   A.U.T.O.R   -   T.I.T.E.L   .EXTENSION",
                "Hans-Georg Sonstwas - Blue-eyed boy-friend.mp3",
                // Some more ugly test cases.
                // Note that arbitrary combinations of / and \ are provided.
                // Consecutive occurrences of these are to be squeezed and
                // replaced by a single separator that corresponds to
                // the platform running the application (use java.io.File.separatorChar).
                // Further note that spaces and tabs (white space) are not
                // altered by this normalization.
                "",
                " ",
                "//your-tmp/part1//file.mp3/",
                "../your-tmp/..//part1//file.mp3/",
                "\\file.mp3",
                "\\part1\\\\file.mp3\\",
                "\\part1///file.mp3",
                "/MP3-Archiv/.nox",
                "/MP3-Archiv/Falco - Rock me Amadeus.",
                "-",
                " -  "
        };

        // Array of the results expected from method getPathname() 
        // We expect normalization with respect to consecutive occurrences of / and \
        // and replacement by a single java.io.File.separatorChar
        // Spaces and tabs (white space) are not altered.
        expectedPathNames = new String[] {
                root + "home" + sep + "meier" + sep + "Musik" + sep + "Falco - Rock Me Amadeus.mp3",
                root + "home" + sep + "db-admin" + sep + "Frankie Goes To Hollywood - The Power Of Love.ogg",
                root + "tmp" + sep + "Deep Purple - Smoke On The Water.wav",
                root + "my-tmp" + sep + "file.mp3",
                "Falco - Rock Me Amadeus.mp3",
                "file.mp3",
                ".." + sep + "music" + sep + "audiofile.au",
                "   A.U.T.O.R   -   T.I.T.E.L   .EXTENSION",
                "Hans-Georg Sonstwas - Blue-eyed boy-friend.mp3",
                // Some more ugly test cases
                "",
                " ",
                sep + "your-tmp" + sep + "part1" + sep + "file.mp3" + sep,
                ".." + sep + "your-tmp" + sep + ".." + sep + "part1" + sep + "file.mp3" + sep,
                sep + "file.mp3",
                sep + "part1" + sep + "file.mp3" + sep,
                sep + "part1" + sep + "file.mp3",
                sep + "MP3-Archiv" + sep + ".nox",
                sep + "MP3-Archiv" + sep + "Falco - Rock me Amadeus.",
                "-",
                " -  "
        };

        // Array of the results expected from method getFilename() 
        // Spaces and tabs (white space) are not altered.
        expectedFileNames = new String[] {
                "Falco - Rock Me Amadeus.mp3",
                "Frankie Goes To Hollywood - The Power Of Love.ogg",
                "Deep Purple - Smoke On The Water.wav",
                "file.mp3",
                "Falco - Rock Me Amadeus.mp3",
                "file.mp3",
                "audiofile.au",
                "   A.U.T.O.R   -   T.I.T.E.L   .EXTENSION",
                "Hans-Georg Sonstwas - Blue-eyed boy-friend.mp3",
                // Some more ugly test cases
                "",
                " ",
                "",
                "",
                "file.mp3",
                "",
                "file.mp3",
                ".nox",
                "Falco - Rock me Amadeus.",
                "-",
                " -  "
        };

        // Array of the results expected from method getAuthor() 
        // Leading and trailing spaces and tabs (white space) are trimmed.
        authors = new String[] {
                "Falco",
                "Frankie Goes To Hollywood",
                "Deep Purple",
                "",
                "Falco",
                "",
                "",
                "A.U.T.O.R",
                "Hans-Georg Sonstwas",
                // Some more ugly test cases
                "", 
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                "Falco",
                "",
                ""
        };

        // Array of the results expected from method getTitle() 
        // Leading and trailing spaces and tabs (white space) are trimmed.
        titles = new String[] {
                "Rock Me Amadeus",
                "The Power Of Love",
                "Smoke On The Water",
                "file",
                "Rock Me Amadeus",
                "file",
                "audiofile",
                "T.I.T.E.L",
                "Blue-eyed boy-friend",
                // Some more ugly test cases
                "",
                "",
                "",
                "",
                "file",
                "",
                "file",
                "",
                "Rock me Amadeus",
                "-",
                ""
        };

        // Array of the results expected from method toString() 
        toStrings = new String[] {
                "Falco - Rock Me Amadeus",
                "Frankie Goes To Hollywood - The Power Of Love",
                "Deep Purple - Smoke On The Water",
                "file",
                "Falco - Rock Me Amadeus",
                "file",
                "audiofile",
                "A.U.T.O.R - T.I.T.E.L",
                "Hans-Georg Sonstwas - Blue-eyed boy-friend",
                // Some more ugly test cases
                "",
                "",
                "",
                "",
                "file",
                "",
                "file",
                "",
                "Falco - Rock me Amadeus",
                "-",
                ""
        };
    }

    public void tearDown() {
        try {
            EmulateOtherOs.reset();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void testSettersAndGetters() {
        // Use the constructor without arguments
        String current = null;
        try {
            for (int i = 0; i < pathNames.length; i++) {
                String p = pathNames[i];
                current = p;

                AudioFile af = new AudioFile();
                af.parsePathname(p);
                af.parseFilename(af.getFilename());

                assertEquals("getPathname() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", expectedPathNames[i],
                        af.getPathname());
                assertEquals("getFilename() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", expectedFileNames[i],
                        af.getFilename());
                assertEquals("getAuthor() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", authors[i], af.getAuthor());
                assertEquals("getTitle() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", titles[i], af.getTitle());
                assertEquals("toString() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", toStrings[i], af.toString());
            }
        } catch (Exception e) {
            fail("Fehler fuer pathname:" + current + ":" + e);
        }
    }

    public void testCtor() {
        // Perform the same getter and setter tests by using the ctor with one
        // argument for construction
        String current = null;
        try {
            for (int i = 0; i < pathNames.length; i++) {
                String p = pathNames[i];
                current = p;

                AudioFile af = new AudioFile(p);
                assertEquals("getPathname() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", expectedPathNames[i],
                        af.getPathname());
                assertEquals("getFilename() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", expectedFileNames[i],
                        af.getFilename());
                assertEquals("getAuthor() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", authors[i], af.getAuthor());
                assertEquals("getTitle() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", titles[i], af.getTitle());
                assertEquals("toString() fuer Testfall [" + i + "]: " + p
                        + " nicht korrekt", toStrings[i], af.toString());
            }
        } catch (Exception e) {
            fail("Fehler fuer pathname:" + current + ":" + e);
        }
    }

    // A test case for the treatment of drive letters.
    // If a drive specifier (a single letter followed by :)
    // is provided it is to be replaced according to the platform.
    // On windows:        d: --> d:  (no transformation of drive specifier)
    // On other platform: d: --> /d/ or more precisely sep + "d" + sep
    public void test_TreatmentOfDriveLetters_01() {
        AudioFile af = new AudioFile();
        af.parsePathname("Z:\\part1\\\\file.mp3\\");

        char sep = java.io.File.separatorChar;

        if (isWindows()) {
            // On Windows we expect "Z:\part1\file.mp3\"
            assertEquals("Pathname stored incorrectly",
                    "Z:" + sep + "part1" + sep + "file.mp3" + sep,
                    af.getPathname());
        } else {
            // On other platforms we expect "/Z/part1/file.mp3/" 
            assertEquals("Pathname stored incorrectly",
                    sep + "Z" + sep + "part1" + sep + "file.mp3" + sep,
                    af.getPathname());
        }
        assertEquals("Returned filename is incorrect", "", af.getFilename());
    }

    // A test case for the treatment of drive letters
    public void test_TreatmentOfDriveLetters_02() {
        AudioFile af = new AudioFile();
        af.parsePathname("Z:///part1//file.mp3");

        char sep = java.io.File.separatorChar;

        if (isWindows()) {
            // On Windows we expect "Z:\part1\file.mp3"
            assertEquals("Pathname stored incorrectly", 
                    "Z:" + sep + "part1" + sep + "file.mp3",
                    af.getPathname());
        } else {
            // On other platforms we expect "/Z/part1/file.mp3/" 
            assertEquals("Pathname stored incorrectly",
                    sep + "Z" + sep + "part1" + sep + "file.mp3",
                    af.getPathname());
        }
        assertEquals("Returned filename is incorrect", "file.mp3", af.getFilename());
    }

    // A test case for the treatment of drive letters
    public void test_TreatmentOfDriveLetters_03() {
        AudioFile af = new AudioFile();
        af.parsePathname("Z:///file.mp3");

        char sep = java.io.File.separatorChar;

        if (isWindows()) {
            // On Windows we expect "Z:\file.mp3"
            assertEquals("Pathname stored incorrectly", 
                    "Z:" + sep + "file.mp3",
                    af.getPathname());
        } else {
            // On other platforms we expect "/Z/file.mp3" 
            assertEquals("Pathname stored incorrectly",
                    sep + "Z" + sep + "file.mp3",
                    af.getPathname());
        }
        assertEquals("Returned filename is incorrect", "file.mp3", af.getFilename());
    }

    /*--------------------------------------------------------------------------
     * Auxiliary methods 
     */

    private boolean isWindows() {
        return System.getProperty("os.name").toLowerCase().indexOf("win") >= 0;
    }
}
 
Servus,

In AudioFile.java
Code:
if (filename.contains(" - ")) {
				String[] split = filename.split(" - ");
				author = split[0];
				author = author.trim();
				title = split[1];
				title = split[1].substring(0, split[1].lastIndexOf("."));
				title = title.trim();
			} else {
Es knallt in der zeile "author = split[0];" (bei mir zeile 98)

De variable Split ist einfach leer.

Der Filename ist: " - "


Wenn du dir die testdaten ansiehst:

Code:
"", " ", "//your-tmp/part1//file.mp3/", "../your-tmp/..//part1//file.mp3/", "\\file.mp3", "\\part1\\\\file.mp3\\",
				"\\part1///file.mp3", "/MP3-Archiv/.nox", "/MP3-Archiv/Falco - Rock me Amadeus.", "-", " - " };

Das problem ist der ganz letzte " - " ==> mit den Spaces


Hoffe somit ein wenig geholfen zu haben :)
 
Mmh, gibt es im JDK nicht Hilfsklassen, die dazu dienen, OS-Unterschiede bspw. bei Pfadangaben zu kapseln?
 
ich ahne glaub ich wo du den fehler siehst. aber von der logik mit dem code liegt der fehler für mich noch im ....

heißt das ich soll noch eine if anweisung machen.
also
Code:
if(author <= author.lengh()) {
author = "";
else {
author = split[0];

EDIT: das probelm ist ja in der parseFilename...aber mein JUnitTest meckert über einen pathname.

junit.framework.AssertionFailedError: Fehler fuer pathname: - :java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at junit.framework.Assert.fail(Assert.java:47)
at AudioFileTest.testSettersAndGetters(AudioFileTest.java:249)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

AudioFileTest.java:249
 
Zuletzt bearbeitet:
Passt doch alles mit dem UnitTest. Er zeigt Fehler in Deinem Code auf. Schau Dir die Exception an (den Stacktrace sollte man sich immer ausgeben lassen, nicht lediglich die Fehlermeldung) und mach Dir Gedanken, warum der Fehler auftritt.

Statt

Code:
fail("Fehler fuer pathname:" + current + ":" + e);

nimm besser

Code:
throw new Error("Fehler fuer pathname:" + current + ":" + e, e);

Sonst wird der eigentliche Grund nicht angezeigt.
 
@el guapo: Doch. File bietet alle nur erdenklichen Methoden hierfür und File.pathSeparator gibt das systemspezifischen Trennzeichen an. Niemand muss sich mit Slashes rumplagen.
 
Zuletzt bearbeitet:
gut der JUnitTest muss ich sagen ist nicht ovn mir geschrieben, sondern wurde mir vorgegeben.
Habe aber dennoch das mal geändert und bekam folgendes rauss

java.lang.Error: Unresolved compilation problem:
The method fail(String) in the type Assert is not applicable for the arguments (String, Exception)

at AudioFileTest.testSettersAndGetters(AudioFileTest.java:249)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

und
at AudioFileTest.test.SettersAndGetters(AudioFile.Test.java:249)
 
Deine Änderung war nicht erfolgreich. Die Fehlermeldung zeigt Dir an warum. Kannst Du selbst damit nichts anfangen?
 
ehrlich gesagt nicht besonders viel. aber ich vermute jetzt mal das er den string in split[0] nicht in author gepackt werden kann.
was ich wiederrum icht verstehe da ja split ein string ist und author auch
 
Ich meinte diese Fehlermeldung:

PHP:
The method fail(String) in the type Assert is not applicable for the arguments (String, Exception)
at AudioFileTest.testSettersAndGetters(AudioFileTest.java:249)

Der Code kompiliert nicht! Wenn Du noch nicht einmal weißt, was dann zu tun ist, frage ich mich, wie Du einen Media-Player programmiert haben willst :rolleyes:

Dieser Fehler hat genau gar nichts, mit dem vorigen Problem zu tun!
 
nunja das was ich hier mache ist ja nur der erste teil des media player. es wird dann pro periode ausgebaut.

aber nun werden die fehler mehr als weniger.
 
Wenn Du noch nicht einmal die Meldung "The method fail(String) in the type Assert is not applicable for the arguments (String, Exception)" richtig interpretieren kannst, solltest Du Dich erst noch mal mit den Grundlagen beschäftigen. Oder Deine Lehrer, Tutoren, Mitschüler oder Kommilitonen fragen...
 
ah ok hab den fehler auf lustigerweise nach speichern und refresh aller fenster behoben ö_Ö

bleibt leider immernoch der eine fehler
 
Zuletzt bearbeitet:
Wenn Du den UnitTest so abgeändert hast, wie ich Dir das geraten habe, wie sieht denn der Stacktrace jetzt aus?
 
er gibt mir nur den fehler von ganz oben wieder mit dem -1
 
Wenn der Code so abgeändert wurde, wie vorgeschlagen, sieht der Stacktrace jetzt anders aus. Damit könnte man dann auch etwas anfangen.

Wenn der Code lediglich in den Ursprungszustand zurückversetzt wurde, erübrigt sich jede weitere Mühe.
 
Zu lustig :freak:

Der Stacktrace, den Du gepostet hast, zeigt lediglich auf die Stelle, an Dem Du (bzw. der Ersteller des Tests) den Test fehlschlagen lässt. Vom eigentlichen Fehler wird lediglich die Meldung angezeigt, nicht aber der Stacktrace. Das ist schlecht.

Mit meiner vorgeschlagenen Änderung würde der Stacktrace des auslösenden Fehlers ebenfalls angezeigt. Damit würde sofort klar werden, wo der Fehler in Deinem Code liegt. So will man das haben. Dann müsste man nicht raten bzw. den Code vollständig lesen und verstehen (als Unbeteiligter).

Wie gesagt, wenn Du die vorgeschlagene Änderung nicht hinbekommst, solltest Du Dich erst noch etwas mit Grundlagen beschäftigen. Alternativ könntest Du natürlich auch einen Debugger bemühen :D
 
Zurück
Oben