为抽搐流调用Jsonreader类

时间:2014-02-22 16:05:22

标签: java json class

我遇到了一个小问题。

我制作了一个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

1 个答案:

答案 0 :(得分:0)

您没有将参数传递给需要它们的方法。由于TwitchLiveChecker.startup()不使用args参数,因此您应将其删除。您的方法签名应为public static void startup(),而不是public static void startup(String[] args)

此外,线程和静态数据(特别是你的public static JSONObject json;不能很好地混合。根据你的线程池正在做什么,你可能有多个线程同时写入你的静态json对象,破坏了其中的数据。