首先,我的目标是从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);
}
尝试编译时遇到的错误如下:
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 ..所以我显然是这里的东西(可能我使用返回错了?)
非常感谢任何人的帮助,如果有更好的方法比做我想做的事情,我也会很高兴听到这个:)谢谢!
编辑:对于我将myURL.WebURL(myArray)传递给sendMessage的前几个答案,我已经这样但是得到了以下错误让我更加困惑:
unreported exception java.lang.Exception; must be caught or declared to be throw
我理解这是因为WebURL抛出一个异常,但是当我声明一个String时,我不知道如何声明/捕获它。
答案 0 :(得分:3)
myUrl是一行MyBot:
MyBot myURL = new MyBot();
如果您更改下一行:
myURL.WebURL(myArray);
sendMessage(channel, myURL);
为:
String actualUrl = myURL.WebURL(myArray);
sendMessage(channel, actualUrl);
它应该有用
编辑:如果您从myURL.WebUrl(myArray)中抛出异常,请将其包含在try / catch块中:
String actualUrl = null;
try {
actualUrl = myURL.WebURL(myArray);
} catch (Exception e) {
actualUrl = "Something default";
}
答案 1 :(得分:1)
您需要传递myURL.WebURL(myArray)
的返回值才能发送消息
String myURLString = myURL.WebURL(myArray);
sendMessage(channel, myURLString);
错误信息非常正确 - 它们通常非常有用,并且几乎总是非常清楚类型错误。
答案 2 :(得分:1)
好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);
}
答案 3 :(得分:1)
尝试从
更改myURL.WebURL(myArray);
sendMessage(channel, myURL);
到此:
sendMessage(channel, myURL.WebURL(myArray));
您的WebURL方法返回一个String值,但您没有对它执行任何操作。相反,您正在传递myURL对象本身,这就是编译器告诉您“无法应用于(java.lang.String,MyBot)”消息的原因。它说你将MyBot类型的东西传递给需要字符串的东西。