2010-10-27 6 views
0

Quand je lance java -jar MidiTest.jar, entrée d'un fichier MIDI, il lance:Impossible de lire l'entrée du pot

 
Exception in thread "main" java.lang.NullPointerException 
     at com.sun.media.sound.StandardMidiFileReader.getSequence(StandardMidi 
leReader.java:209) 
     at javax.sound.midi.MidiSystem.getSequence(MidiSystem.java:802) 
     at MidiTest.playMidi(MidiTest.java:56) 
     at MidiTest.(MidiTest.java:44) 
     at MidiTest.main(MidiTest.java:25) 

Si je java MidiTest à la place qu'il pourrait jouer sans problème. Quel problème avec le code? Je l'ai déjà ajouter Main-Class: MidiTest avec saut de ligne dans le dossier Manifest

Mon code:

 private void playMidi() { 
    if(isPlaying.equals("0")) { 
     try { 
      song = MidiSystem.getSequence(
       getClass().getResource(filename)); 
      sequencer = MidiSystem.getSequencer(); 
      sequencer.setSequence(song); 
      sequencer.open(); 
      sequencer.addMetaEventListener(this); 
      sequencer.start(); 
     } catch (InvalidMidiDataException e) { 
      System.out.println("Bad midi file: " 
       + filename); 
      System.exit(1); 
     } catch (MidiUnavailableException e) { 
      System.out.println("No sequencer available"); 
      System.exit(1); 
     } catch (IOException e) { 
      System.out.println("Could not read: " 
       + filename); 
      System.exit(1); 
     } 
     displayMidiInfo(filename); 
     } else { 
     updateTempoFactor(speed); 
     } 
    } 
+0

Je devine qu'il a quelque chose à voir avec la façon dont vous accédez à la fichier, mais nous avons besoin de voir votre code pour vraiment vous aider avec celui-ci. –

+0

Ok, j'ai ajouté mon code. Mon entrée est "MidiFileNewsong.mid" qui va ensuite décoller et jouer avec "song.mid". – Proyb2

Répondre

3

Vous ne semblez pas être vérifier si la ressource que vous essayez d'obtenir quelque chose est de retour non nulle. Plus précisément:

song = MidiSystem.getSequence(
    getClass().getResource(filename)); 

provoque ce problème particulier. Il pourrait y avoir un problème plus profond, qui est que, sauf si la ressource représentée par filename est réellement dans le jar, sur le chemin de classe ou dans le même répertoire que le fichier jar getResource() ne va pas le trouver. Si vous essayez d'accéder à un fichier partout dans le système de fichiers général (pas dans le fichier jar), vous devez utiliser File:

song = MidiSystem.getSequence(new File(filename)); 
+0

Cela résout vraiment. Je vous remercie! Maintenant je peux développer un logiciel midi. – Proyb2

Questions connexes