Метод, возвращаемый тип String не является String - PullRequest
1 голос
/ 28 января 2010

Прежде всего, моя цель здесь - прочитать URL-адрес, разобрать его, взять информацию из него и передать его другому методу sendMessage, который затем отправляет его клиенту IRC.Я давно не занимаюсь Java, поэтому я адаптирую то, что кодирую, в интернете.Приведенные ниже методы работают, когда они объявлены в своем собственном файле класса и запускаются путем передачи URL-адреса методу main, но я не могу заставить его работать, вызывая класс из MyBot или объявляя методы вмой MyBot файл.

public static BufferedReader read(String url) throws Exception{
    return new BufferedReader(
        new InputStreamReader(
            new URL(url).openStream()));}

public static String WebURL (String[] args) throws Exception{
    BufferedReader reader = read(args[0]);
    String line = reader.readLine();
    String newURL = new String();

    while (line != null) {
    if (line.contains("<meta ")) {
            String predef = new String(line.split("<meta content='")[1]);
            //line.indexOf finds where to take up till, substring takes from beginning until there
            String def = new String(predef.substring(0, (predef.indexOf("' name="))));
            newURL = def;
        }
    else {
        newURL = "No definition available";
    }
    line = reader.readLine(); }
    return newURL;

    }

Теперь в основном у меня есть следующее:

if (message.startsWith("!def ")) {
        String[] myArray = new String[2];   
        myArray[0] = message;
        MyBot myURL = new MyBot();
        myURL.WebURL(myArray);
        sendMessage(channel, myURL);
    }

Ошибка, которую я получаю при попытке компиляции, следующая:

 <code>MyBot.java:62: cannot find symbol
symbol : sendMessage(java.lang.String,java.lang.String)
cannot be applied to (java.lang.String,MyBot)
sendMessage(channel,myURL);
^

Так что, похоже, говорится, что MyURL не является String, но тип возвращаемого значения метода - String ... так что я, очевидно, что-то здесь (возможно, я использую returnнеправильно?)

Очень благодарен за чью-либо помощь, и если есть лучший способ, чем этот, делать то, что я хочу, я был бы рад услышать это тоже :) Спасибо!

РЕДАКТИРОВАТЬ: Комупервые несколько ответов, которые побуждают меня передать myURL.WebURL (myArray) в sendMessage, я уже сделал это, но получил следующую ошибку, которая меня смутила больше:

unreported exception java.lang.Exception; must be caught or declared to be throw Я понимаю, это потому, что WebURL выдает исключение, но яне знаю, как объявить / поймать этокогда я объявляю строку ..

Ответы [ 4 ]

3 голосов
/ 28 января 2010

myUrl - это тип MyBot из строки:

MyBot myURL = new MyBot();

Если вы измените следующие строки с:

myURL.WebURL(myArray);
sendMessage(channel, myURL);

на:

String actualUrl = myURL.WebURL(myArray);
sendMessage(channel, actualUrl);

itдолжно работать

РЕДАКТИРОВАТЬ: Если вы вызываете исключение из myURL.WebUrl (myArray), заключите его в блок try / catch:

String actualUrl = null;
try {
    actualUrl = myURL.WebURL(myArray);
} catch (Exception e) {
    actualUrl = "Something default";
}
1 голос
/ 28 января 2010

Ну, myURL это не строка, это MyBot. Вам нужно присвоить результат вызова myURL.WebURL(myArray); переменной String и использовать ее для вызова sendMessage();:

if (message.startsWith("!def ")) {
    String[] myArray = new String[2];   
    myArray[0] = message;
    MyBot myURL = new MyBot();
    String myURLString = myURL.WebURL(myArray);
    sendMessage(channel, myURLString);
}
1 голос
/ 28 января 2010

Попробуйте изменить с

myURL.WebURL(myArray);
sendMessage(channel, myURL);

к этому:

sendMessage(channel, myURL.WebURL(myArray));

Ваш метод WebURL возвращает значение String, но вы ничего не делаете с ним. Вместо этого вы передаете сам объект myURL, поэтому компилятор сообщает вам, что сообщение «невозможно применить к (java.lang.String, MyBot)». Это говорит о том, что вы передаете что-то типа MyBot чему-то, что требует String.

1 голос
/ 28 января 2010

Вам нужно передать возвращаемое значение myURL.WebURL(myArray), чтобы отправить сообщение

String myURLString = myURL.WebURL(myArray);
sendMessage(channel, myURLString);

Сообщение об ошибке совершенно корректно - обычно оно очень полезно и почти всегда очень четко определяет ошибки типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...