我遇到了一个小问题。
我制作了一个json url检查程序,用于检查twitch.tv流是在线还是离线。 这一件事是在一个单独的类TwitchLiveChecker.java中处理的。
现在我想用一个计时器调用该类所有X分钟但不知何故我不明白如何调用该类。
这就是我所说的;
public void LiveChecker() {
TTtwl.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
TwitchLiveChecker.startup(); *<- THIS Doesnt work :(*
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(TwitchLiveChecker.json);
System.out.println(TwitchLiveChecker.json);
}
}, 1000*10, 1000*10);
}
这是我的TwitchLiveChecker类文件;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.Charset;
import org.json.JSONException;
import org.json.JSONObject;
public class TwitchLiveChecker {
public static JSONObject json;
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
} finally {
is.close();
}
}
public static void startup(String[] args) throws IOException, JSONException {
json = readJsonFromUrl("http://api.justin.tv/api/stream/list.json?channel="+MyBot.ownerchannel+"");
System.out.println(json.toString());
System.out.println(json.get("id"));
}
}
我感谢任何有关我做错的提示或例子:D
答案 0 :(得分:0)
您没有将参数传递给需要它们的方法。由于TwitchLiveChecker.startup()
不使用args
参数,因此您应将其删除。您的方法签名应为public static void startup(
),而不是public static void startup(String[] args)
此外,线程和静态数据(特别是你的public static JSONObject json;
不能很好地混合。根据你的线程池正在做什么,你可能有多个线程同时写入你的静态json对象,破坏了其中的数据。