2016-10-14 5 views
-1

Hallo also ich versuche, diesen Code zu verwenden, um aus einer Textdatei zu lesen, soll die Textdatei eine Tonhöhe definieren, indem Sie überprüfen, ob die Zeichenfolge der nächsten Zeile mit jedem Stopp beginnt , play oder duration und übergibt es dann an den Synthesizer, damit es spielen kann.java.util.InputMismatchException Beim Laden von Datei

Hat jemand eine Idee, warum es Fehler verursacht und nicht funktioniert?

Der Code und ein Beispiel Textdatei sind wie folgt:

 public class MyTuneRunnable implements Runnable { 
     //method start 
     public void run(){ 
      Thread thread = Thread.currentThread(); 
      thread.getName(); 
       try { 
        Synthesizer synth = MidiSystem.getSynthesizer(); 
        synth.open(); 
        MidiChannel[] channels = synth.getChannels(); 
      File file = new File(Loader.instance().getConfigDir().getParentFile().getAbsolutePath()+"/"+"LoadTunes"+"/"+Config.tuneName+".txt"); 
      try { 
       Scanner intLoader = new Scanner(file); 
       Scanner stringLoader = new Scanner(file); 
       while (intLoader.hasNextLine()&stringLoader.hasNextLine()) { 
        int i = intLoader.nextInt(); 
        String s = stringLoader.next(); 
        if (s.startsWith("play")){ 
         channels[channel].noteOn(i, volume); 
        } 
        if (s.startsWith("stop")){ 
         channels[channel].noteOff(i, volume); 
        } 
        if (s.startsWith("duration")){ 
         Thread.sleep(i); 
        } 
       } 
       intLoader.close(); 
       stringLoader.close(); 
      } 
      catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

      synth.close(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
     } 
     } 

Was, wie die Textdatei aussieht ... dies ist ein Beispiel:

0 This is a comment 
0 
play 60   This is a C note and it is set to play because of 'play <note number>' 
0 
duration 200 This is saying the currently playing notes will make sound 
0 
stop 60   This stops playing the C note because of the 'stop <note number>' 
+0

Wenn Sie eine Ausnahme erhalten und danach fragen, sollten Sie den gesamten Stacktrace mit Ihrer Frage posten. Es enthält wichtige Informationen. Gib auch an, welche Zeile es wirft. –

+0

Warum verwenden Sie zwei Scanner in derselben Datei? Dies ist wahrscheinlich, was Sie stolpert, da das Vorrücken des Zeigers in einem den anderen nicht voranbringt. –

+0

........... hallo? –

Antwort

1

Ihr Problem verwenden Stielen zwei Scanner in der gleichen Datei. Sie gehen davon aus, dass, wenn ein Scanner ein Token liest, beide ihre Zeiger weiterleiten, und das passiert nicht - nur der Scanner, der das Token liest, geht weiter, und aus diesem Grund versuchen Sie, ein int zu lesen, wenn der Scanner zeigt auf Text. Tun Sie dies nicht, verwenden Sie nur einen Scanner.

Wenn Sie das gesagt haben, können Sie mehr als einen Scanner verwenden, aber nur einen von ihnen lesen Sie die Datei, und das ist etwas, was ich häufig: ein Scanner liest die Datei, erhalten jede Zeile von String über nextLine() und andere Scanner wird für jede Textzeile erstellt, um die in der Zeile gefundenen Token zu extrahieren. Wenn ich das tue, sorge ich dafür, dass jeder Zeilenscanner geschlossen wird, wenn Sie damit fertig sind, und schließe natürlich den Dateiscanner, wenn er damit fertig ist.

Verwandte Themen