首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要帮助,为什么我得到NPE和如何停止剪辑时,它正在播放

我需要帮助,为什么我得到NPE和如何停止剪辑时,它正在播放
EN

Stack Overflow用户
提问于 2013-10-18 07:05:22
回答 1查看 72关注 0票数 0

嗨,我正在拼命寻找一个解决方案,当我的剪辑已经运行时,我将如何停止它,我已经寻找了多少天了,但我仍然找不到一个解决方案。请任何知道如何帮助我的人。

以下是我的代码

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

import javazoom.jl.player.Player;

public class server
{
    private static final int PORT = 7777;

    private static ServerSocket serverSocket;
    private static Socket clientSocket;
    private static InputStreamReader inputStreamReader;
    private static BufferedReader bufferedReader;
    private static String message;


    @SuppressWarnings("unused")
    private String filename;  
    private static  Clip clip1;
    private static  Clip clip2;
    private static  Clip clip3;
    private static  Clip clip4;
    private static  Clip clip5;
    private static  Clip clip6;
    static Player player; 

    public server(String filename) {  
        this.filename = filename;  


    }
    public static void main(String[] args) throws Exception

    {


        try
        {
            serverSocket = new ServerSocket(PORT, 0, InetAddress.getLocalHost());

            System.out.println("IP:  " + serverSocket.getInetAddress() + "  Port:  " +  serverSocket.getLocalPort());

        } catch (IOException e)
        {
            System.out.println("Could not listen on port: 7777");
        }

        System.out.println("Server started. Listening to the port 7777");

        while (true)
        {

            try
            {
                clientSocket = serverSocket.accept();
                inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
                bufferedReader = new BufferedReader(inputStreamReader); 
                message = bufferedReader.readLine();


                System.out.println(message);{
                clip1 = null;
                clip2 = null;
                clip3 = null;
                clip4 = null;
                clip5 = null;
                clip6 = null;
                 if (message.equals("rock1")) {

                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("D:/Andrd/Music/TheAll-AmericanRejects-Swing,Swing.wav"));
                      clip4 = AudioSystem.getClip();

                      clip4.open(inputStream);
                      clip4.start(); 
                      SwingUtilities.invokeLater(new Runnable() {
                          public void run() {
                              JOptionPane.showMessageDialog(null, "rock1 song is playing!");
                          }
                      });  
                } else if (message.equals("stop") && clip4 != null && clip4.isRunning()){
                     clip4.stop();
                 }
                 if(message.equals("rock2")) {

                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("D:/Andrd/Music/FallOutBoy-SugarWe'reGoingDownWithLyrics!HQ.wav"));
                        clip5 = AudioSystem.getClip();
                        clip5.open(inputStream);
                       clip5.start();
                       SwingUtilities.invokeLater(new Runnable() {
                           public void run() {
                               JOptionPane.showMessageDialog(null, "rock2 song is playing!");
                           }
                       });
                } else if(message.equals("stop") && clip5 != null && clip5.isRunning()) {
                    clip5.stop();
                }
                 if(message.equals("rock3")) {

                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("D:/Andrd/Music/Fall Out Boy Light Em Up Lyrics.wav"));
                        clip6 = AudioSystem.getClip();
                        clip6.open(inputStream);
                        clip6.start();
                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                JOptionPane.showMessageDialog(null, "rock3 song is playing!");
                            }
                        });
                 } else if(message.equals("stop") && clip6 !=null && clip6.isRunning()){
                clip6.stop();
            }
                if(message.equals("punk1")){
                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("D:/Andrd/Music/athousandmiles.wav"));
                    clip1 = AudioSystem.getClip();
                    clip1.open(inputStream);
                    clip1.start();
                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            JOptionPane.showMessageDialog(null, "punk1 song is playing!");
                        }
                    });
             } else if(message.equals("stop") && clip1 !=null && clip1.isRunning()){
            clip1.stop();
        }
                if(message.equals("punk2")){
                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("D:/Andrd/Music/ISSUES - Boyfriend Lyric Video (Punk Goes Pop 5).wav"));
                    clip2 = AudioSystem.getClip();
                    clip2.open(inputStream);
                    clip2.start();
                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            JOptionPane.showMessageDialog(null, "punk2 song is playing!");
                        }
                    });
             } else if(message.equals("stop") && clip2 !=null && clip2.isRunning()){
            clip2.stop();
        }
                if(message.equals("punk3")){
                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("D:/Andrd/Music/My Chemical Romance - Famous Last Words (Lyrics) - GetThemLyrics.wav"));
                    clip2 = AudioSystem.getClip();
                    clip2.open(inputStream);
                    clip2.start();
                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            JOptionPane.showMessageDialog(null, "punk3 song is playing!");
                        }
                    });
             } else if(message.equals("stop") && clip3 !=null && clip3.isRunning()){
            clip3.stop();
        }
           }
                inputStreamReader.close();
                clientSocket.close();
            }catch (IOException ex)
            {
                System.out.println("Problem in message reading");
            }


        } 
        }

}

问题是,当收到“停止”消息时,歌曲并没有停止,当它收到另一条消息,如"rock2“时,即使已经有一首歌曲正在播放,它也会继续播放。请帮我修复这个程序..

这是我的java stacktrace控制台:

代码语言:javascript
复制
 Exception in thread "main" java.lang.NullPointerException
    at server.main(server.java:73)

它可以同时播放所有3首歌曲,但它无法停止,当我尝试发送2条相同的消息时,服务器崩溃并显示上述错误。

EN

回答 1

Stack Overflow用户

发布于 2013-11-24 19:14:49

上面Phil的评论是正确的。

如果您想避免使用message.equals("stop"),那么编写NullPointerExceptions通常比编写"stop".equals(message)更安全。

而且,您似乎从未检查过message的有效性。如果没有更多的输入,即对方刚刚挂断,则readLine()返回null。在这种情况下,您可能需要等待下一个请求。

代码语言:javascript
复制
[...]
message = bufferedReader.readLine();
// the following line may solve the issue:
if (message == null) continue;

干杯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19438815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档