Hola gente del foro, les quería hacer una consulta, aclarando que no soy muy bueno con Java, pero quiero armar una pequeña aplicación que, leyendo un JSon de internet, me devuelve el número de participantes en un chat de Twitch.
El problema que tengo, es que no se como hacer que ese valor se "refresque" pasado X tiempo.
Mi código están en 2 partes, uno que arma la ventana y el otro que lee la URL y me devuelve un INT con el número de personas en el chat (Ese valor necesito actualizar mientras el programa esta corriendo.
TwitchMonitor.java
Código Java:
Ver originalimport java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import org.json.JSONException;
public class TwitchMonitor
extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private String channelName
= "pokerstaples";
private JLabel labelChattersCount
;
/**
* Launch the application.
*/
public static void main
(String[] args
) { public void run() {
try {
TwitchMonitor frame = new TwitchMonitor();
frame.setVisible(true);
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
* @throws JSONException
* @throws IOException
*/
public TwitchMonitor
() throws IOException, JSONException
{ setResizable(false);
setBackground
(Color.
BLACK); setDefaultCloseOperation
(JFrame.
EXIT_ON_CLOSE); setTitle("Chatters Monitor for Twitch Channels by MrAmericanMike");
try{
// URL urlIcon = TwitchMonitor.class.getResource("/resources/icon.png");
// ImageIcon img = new ImageIcon(urlIcon);
// this.setIconImage(img.getImage());
}
e.printStackTrace();
}
setSize(200, 130);
setLocationRelativeTo(null);
thePanel.
setBackground(Color.
BLACK); setContentPane(thePanel);
labelChatters
= new JLabel(channelName
); labelChatters.
setForeground(Color.
WHITE); labelChatters.setBounds(5, 5, 185, 30);
labelChatters.
setFont(new Font("Tahoma",
Font.
PLAIN,
20));
int chattersCount = JsonReader.count(channelName.toLowerCase());
labelChattersCount
= new JLabel(""+chattersCount
); labelChattersCount.
setForeground(Color.
WHITE); labelChattersCount.setBounds(5, 0, 185, 130);
labelChattersCount.
setFont(new Font("Tahoma",
Font.
PLAIN,
60));
try{
// URL url = TwitchMonitor.class.getResource("/resources/background.png");
// lblNewLabel.setIcon(new ImageIcon(url));
}
e.printStackTrace();
}
lblNewLabel.setBounds(0, 0, 200, 130);
thePanel.setLayout(null);
thePanel.add(labelChatters);
thePanel.add(labelChattersCount);
thePanel.add(lblNewLabel);
}
}//END CLASS
JsonReader.java
Código Javascript
:
Ver originalimport 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 JsonReader {
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 main(String[] args) throws IOException, JSONException {
}
public static int count(String channelName) throws IOException, JSONException
{
JSONObject json = readJsonFromUrl("http://tmi.twitch.tv/group/user/"+channelName+"/chatters");
int chattersCount = (Integer)json.get("chatter_count");
return chattersCount;
}
}
Agradezco cualquier ayuda que me puedan dar. ;)