2016-06-11 2 views
-3

Я работаю над этим кодом очень долго, и я просто не могу понять свою проблему. я хочу, чтобы иметь возможность воспроизводить список песен один за другим, и я думал, что смогу сделать это с помощью простого рекурсивного метода, который задерживает среднюю длину песни, и позвольте ей вызвать следующую песню и воспроизвести ее. .. Однако он играет только самую первую песню, а затем останавливается после этого, и больше ничего не происходит ... Я попросил бесчисленное множество людей посмотреть на это, и никто не может мне помочь. И нет, это не школьный проект, это музыка, которую мама хотела бы мне использовать на вечеринке в следующий предстоящий уик-энд, так что это похоже на мое последнее усилие в канаве ... Любая помощь с этим будет очень признательна !!!Почему моя программа не будет воспроизводить следующую песню в массиве?

private JLabel messageLabel; 
private JButton playlist; 
private JPanel panel; 
BufferedImage image; 
AudioStream audioStream1, audioStream2, audioStream3; 
//Object[] music = new Object[3]; 
private final int WINDOW_WIDTH = 800; 
private final int WINDOW_HEIGHT = 525; 

// File destinationss  
private String s1 = "C:\\Users\\Tony\\Desktop\\Java\\NetBeansProjects\\Gui Stuff\\src\\No_Pressure.wav"; 
private String s2 = "C:\\Users\\Tony\\Desktop\\Java\\NetBeansProjects\\Gui Stuff\\src\\Grateful_Dead_-_Touch_of_Grey.wav"; 
private String s3 = "C:\\Users\\Tony\\Desktop\\Java\\NetBeansProjects\\Gui Stuff\\src\\Stairway_to_Heaven_Led_Zeppelin_Lyrics.wav"; 

InputStream in1 = new FileInputStream(s1); 
InputStream in2 = new FileInputStream(s2); 
InputStream in3 = new FileInputStream(s3); 
private ArrayList music; 

public JukeBoxWithArrays() throws IOException { 

    music = new ArrayList(); 

    audioStream1 = new AudioStream(in1); 
    audioStream2 = new AudioStream(in2); 
    audioStream3 = new AudioStream(in3); 

    music.add(audioStream1); 
    music.add(audioStream2); 
    music.add(audioStream3); 

    setTitle("Juke Box Playlist"); 
    setSize(WINDOW_WIDTH, WINDOW_HEIGHT); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    messageLabel = new JLabel("Click the Button to play the playlist"); 

    // Create the Playlist button 
    playlist = new JButton("Playlist number 1"); 

    // Register the event Listener 
    playlist.addActionListener(new PlaylistListener()); 

    // Create the panel 
    panel = new JPanel(); 
    image = ImageIO.read(new File("C:\\Users\\Tony\\Desktop\\Java\\NetBeansProjects\\Gui Stuff\\src\\jukebox2.jpg")); 
    panel.add(messageLabel); 
    panel.add(playlist); 
    panel.add((new JLabel(new ImageIcon(image)))); 

    // Add the panel to the Content Pane 
    add(panel); 

    // Display the Window 
    setVisible(true); 
} 

private class PlaylistListener implements ActionListener { 

    int x = 0; 

    public void actionPerformed(ActionEvent e) { 

     try { 
      playMusic(x); 

     } catch (InterruptedException ex) { 
      Logger.getLogger(JukeBoxWithArrays.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public void playMusic(int x) throws InterruptedException { 

     if (x > music.size()) { 
      AudioPlayer.player.stop((InputStream) music.get(x)); 

     } else { 
      AudioPlayer.player.start((InputStream) music.get(x)); 

     } 
     Thread.sleep(5 * 60 * 1000); // I believe this is where I am running into my problem 
     playMusic(x++); 

    } 

} 

@SuppressWarnings("restriction") 
public static void main(String[] args) throws Exception { 

    JukeBoxWithArrays jbwa = new JukeBoxWithArrays(); 
    jbwa.pack(); 

} 

}

+1

OK Я не буду спрашивать вас, почему ваша мать хочет, чтобы вы использовали это вместо того, чтобы выявлять ... в любом случае ... откуда этот код? Вы пытались отладить его? Почему вы думаете, что thread.sleep (5 * 60 * 1000) вызывает проблему? – Paolof76

+0

Я думаю, что это вызывает проблему, потому что, прежде чем я добавил, что метод работал, но песни будут играть поверх друг друга. Таким образом, все, что я пытался сделать, это разделить их на части, чтобы можно было играть, а затем следующий и т. Д. – amich

ответ

2

Кажется, что ваш код не удается по той же причине этого:

private static int x = 0; 

public static void main(String[] args) throws ParseException { 
    int x = 0; 
    doSomething(x); 
    doSomething(x); 
    doSomething(x); 
    doSomething(x); 
    doSomething(x); 
} 

private static void doSomething(int x) { 
    System.out.println(x++); 
} 

Выходы это:

0 
0 
0 
0 
0 

Ваш Слушатель имеет x поле, что ваш , проходящих по значению между методами. Вы должны удалить аргумент x на playMusic(), поэтому каждый раз, когда он увеличивает x, вместо этого он будет использовать поле объекта.

+0

Используйте playMusic (++ x); –

+0

Нет, это не помогает – everton

+0

Логически в моей голове, которая должна печатать 1 каждый раз. Так что вы говорите, что мне нужно сначала увеличить X, а затем вызвать метод? – amich

Смежные вопросы