J'ai un programme d'écoute d'action sur un lecteur multimédia utilisant vlcj. Quand j'exécute le programme en mode débogage, l'écouteur d'action se déclenche quand la vidéo est finie mais quand je l'exécute normalement en éclipse, il ne se déclenche pas.Le programme d'écoute d'action ne fonctionne qu'en mode débogage
Mon action auditeur
public static void youtubeGui(){
Main.playing = true;
final JFrame f = new JFrame();
f.setLocation(100,100);
f.setSize(1000,600);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true);
Canvas c = new Canvas();
c.setBackground(Color.black);
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(c);
f.add(p);
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(),"C:\\Program Files\\VideoLAN\\VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
MediaPlayerFactory mpf = new MediaPlayerFactory();
EmbeddedMediaPlayer emp = mpf.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(f));
emp.setVideoSurface(mpf.newVideoSurface(c));
emp.setPlaySubItems(true);
String str = Insert.videoQueue.peek();
emp.prepareMedia(str);
emp.play();
Main.playing = true;
try {
TimeUnit.SECONDS.sleep(4);
} catch (InterruptedException e) {
e.printStackTrace();
}
emp.addMediaPlayerEventListener(new MediaPlayerEventAdapter() {
@Override
public void finished(MediaPlayer mediaPlayer) {
Insert.videoQueue.remove();
System.out.println("aaaaa");
f.setVisible(false);
f.dispose();
Main.playing = false;
}
});
}
Vérification de la nouvelle méthode des inserts
public static void addCheck(String locationIn) throws IOException {
String fileLine = "";
String a = "";
while (true) {
Scanner inFile = new Scanner(new FileReader(
locationIn));
while (inFile.hasNext()) {
fileLine = inFile.nextLine();
}
if (fileLine.contains("watch?v=") && fileLine.contains("!add") && !fileLine.equals(a)) {
a = fileLine;
String result = fileLine.substring(fileLine.indexOf("[URL]") + 5, fileLine.indexOf("[/URL]"));
videoQueue.add(result);
result = "";
if(Main.playing == false){
Gui.youtubeGui();
}
}
inFile.close();
}
}
Je suppose que vous avez un problème de threading graphique, que votre interface graphique est bloquée en raison du code de longue durée qui s'exécute sur le thread d'événement de l'interface graphique, mais je serai sacrément si je peux le prouver Je ne comprends pas complètement votre code. Veuillez envisager de créer et d'afficher un [mcve] valide. –
En outre, si vous formatez mieux votre code pour qu'il respecte les normes Java, il nous sera plus facile à tous de comprendre et de lire. –
J'ai formaté votre code pour plus de lisibilité, mais dans le futur je vous recommande fortement de le faire vous-même, en particulier en donnant à votre code les indentations appropriées, généralement 4 espaces par bloc, et en vérifiant que même niveau d'indentation. Le formatage est très important car si votre code n'est pas dans un format standard accepté, il n'est pas très lisible, et s'il n'est pas lisible, il est difficile de déboguer et de comprendre. –