0

Web サイトから 1 行のソースを取得しようとしていて、その行をメインに戻しています。InputStream を定義している行でエラーが発生し続けます。この行でエラーが発生するのはなぜですか?

public class MP3LinkRetriever
{
    private static String line;

public static void main(String[] args)
{
    String link = "www.google.com";
    String line = "";

    while (link != "")
    {
        link = JOptionPane.showInputDialog("Please enter the link");

        try
        {
            line = Connect(link);
        }
        catch(Exception e)
        {
        }

        JOptionPane.showMessageDialog(null, "MP3 Link: " + parseLine(line));


        String text = line;

        Toolkit.getDefaultToolkit( ).getSystemClipboard()
        .setContents(new StringSelection(text), new ClipboardOwner()
        { 
            public void lostOwnership(Clipboard c, Transferable t) { } 
        });

        JOptionPane.showMessageDialog(null, "Link copied to your clipboard");

    }
}

public static String Connect(String link) throws Exception { 

    String strLine = null; 
    InputStream in = null; 
    try { 
        URL url = new URL(link); 
        HttpURLConnection uc = (HttpURLConnection) url.openConnection(); 

        in = new BufferedInputStream(uc.getInputStream()); 

        Reader re = new InputStreamReader(in); 

        BufferedReader r = new BufferedReader(re); 

        int index = -1; 

        while ((strLine = r.readLine()) != null && index == -1) { 
            index = strLine.indexOf("<source src"); 
        } 

    } finally { 
        try { 
            in.close(); 
        } catch (Exception e) { 
        } 
    } 

    return strLine; 
} 


public static String parseLine(String line)
{
    line = line.replace("<source", "");
    line = line.replace(" src=", "");
    line = line.replace("\"", "");
    line = line.replace("type=", "");
    line = line.replace("audio/mpeg", "");
    line = line.replace(">", "");

    return line;
}

}

4

2 に答える 2

3

strLine = r.readLine();nullコンテンツの最後に到達すると戻りnullますが、行を読んだ後、コードで使用する前に可能性をチェックしません...

次のようなものを試してください...

while ((strLine = r.readLine()) != null && index == -1) {
    index = strLine.indexOf("<source src");
}

また、メソッドを終了する前に必ずスチームを閉じてください...

InputStream in = null;
try {
    // The rest of your code...
} finally {
    try {
        in.close();
    } catch (Exception exp) { // We don't really care about this one..
    }
}

更新 - 完全な例

これは私が使用していたテストコードで、正常に動作します...

public class TestWebDownload {

    public static void main(String[] args) {
        try {
            Connect("http://www.google.com.au");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static String Connect(String link) throws Exception {

        String strLine = null;
        InputStream in = null;
        try {
            URL url = new URL(link);
            HttpURLConnection uc = (HttpURLConnection) url.openConnection();

            in = new BufferedInputStream(uc.getInputStream());

            Reader re = new InputStreamReader(in);

            BufferedReader r = new BufferedReader(re);

            int index = -1;

            while ((strLine = r.readLine()) != null && index == -1) {
                index = strLine.indexOf("<source src");
            }

        } finally {
            try {
                in.close();
            } catch (Exception e) {
            }
        }

        return strLine;
    }
}

アップデート

新しい問題は古い問題と似ています。渡された情報が正しくない、または有効でない可能性があるとは予想できません...

public static String parseLine(String line)
{

    // What if line is null ??
    line = line.replace("<source", "");
    line = line.replace(" src=", "");
    line = line.replace("\"", "");
    line = line.replace("type=", "");
    line = line.replace("audio/mpeg", "");
    line = line.replace(">", "");

    return line;
}
于 2012-09-24T00:43:47.953 に答える
0

アップデート

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class Example {    
    public static void main(String[] args) {
        String strLine = "Line never found";
        try (BufferedReader in = new BufferedReader(new InputStreamReader(new URL("page").openStream()))){
            while ((strLine = in.readLine()) != null) {
                if (strLine.indexOf("<source src") > 0) {
                    break;
                }
            }
            in.close();
        } catch (MalformedURLException e) {
            System.out.println("MalformedURL catched");
        } catch (IOException e) {
            System.out.println("InputOutputException catched");
        } 
    }
}
于 2012-09-24T00:45:51.930 に答える