Java,从另一个 class 调用可运行任务

Java, calling runnable task from another class

我正在尝试制作一个小程序来与我的 Lifx 灯泡互动。 我有一个 class 灯泡,我做了一个 运行nable:

public Runnable runnableToggle = new Runnable() {
    @Override
    public void run() {
        try {
            String url = "https://api.lifx.com/v1/lights/" + Bulb.this.ID + "/toggle/";

            URL obj = null;
            try {
                obj = new URL(url);
            } catch (MalformedURLException e) {
                System.out.println("Malformed URL");
                e.printStackTrace();
            }

            assert obj != null;
            HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

            String authS = "Bearer MY_TOKEN";
            con.setRequestProperty("Authorization", authS);
            con.setRequestMethod("POST");
            con.setDoOutput(true);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};

但是,当我将此表单称为我的主要 class 时,它不起作用。

Thread t = new Thread(deskBulb.runnableToggle);
t.start();

程序刚刚执行,没有打印错误。

如果我 运行 使用与 class 中的 "normal" 函数完全相同的代码,它就可以工作。

我以前没有用过 运行nables,所以可能是一个愚蠢的错误。无论如何,感谢任何回答的人的帮助。

你的 class Bulb 应该实现一个 Runnable 接口,然后像这样实现 运行 方法:

public class Bulb implements Runnable{
...
  @Override
  public void run() {
  // add your logic here
  }
...
}

然后,创建一个你的实例 class,并启动 thread :

Bulb bulb = new Bulb();
Thread t = new Thread(bulb );
t.start();

如果您的代码 运行 没有错误,问题可能出在服务 REST 上,请尝试添加响应代码 return 以查看有关 return:

的更多信息
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);

BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();

while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();

//print result
System.out.println(response.toString());