2016-10-14 8 views
-1

こんにちは、このコードをテキストファイルから読み込もうとしています。テキストファイルは、次の行の文字列がいずれかのストップで始まるかどうかを調べることでピッチを定義することになっています、再生、またはデュレーションを設定し、それをシンセに渡して再生できるようにします。java.util.InputMismatchExceptionファイルからロードするとき

誰もがエラーを引き起こしていて動作していない理由を知っていますか?次のように

コードとサンプルテキストファイルは、以下のとおりです。テキストファイルがどのように見えるかについては

 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(); 
     } 
     } 
     } 

...これは一例です:

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

例外が発生し、それについて質問している場合は、スタックトレース全体を質問に投稿したいと思うでしょう。重要な情報が含まれています。また、それをスローする行も示します。 –

+0

同じファイルで2つのスキャナーを使用しているのはなぜですか?これは、ポインタを前進させても前進しないため、あなたを引き上げる可能性があります。 –

+0

...........こんにちは? –

答えて

1

あなたの問題は、を使用してから、茎同じファイル上に2台のスキャナがあります。あるスキャナがトークンを読み取ったときにポインタが前進し、それが起こらないと仮定すると、トークンを読み取ったスキャナだけが前進すると仮定しています。このため、スキャナを使用しているときにintを読み取ろうとしていますテキストを指しています。これを行わないでください。スキャナを1つだけ使用してください。

複数のスキャナを使用することができますが、そのうちの1人にしかファイルを読み取らせることはできません。スキャナがファイルを読み取って、文字列の各行をnextLine()で取得します。各行のテキストに対してスキャナが作成され、その行にあるトークンが抽出されます。私がこれを行うとき、私はそれが完了したら、各ラインスキャナを閉じるために気を配り、それと完全に完了したらファイルスキャナを閉じる。

関連する問題