我尝试在网上搜索,但每个问题似乎都涉及网络开发。我只是想知道是否甚至可以从互联网(游戏结果和游戏事件)中获取数据,这些数据每秒或每10秒等更新一次,来自一个不是我的网站。使用Swing库接口在Java桌面客户端中显示它?如果是的话,最好的方法是什么?
谢谢你
答案 0 :(得分:2)
是的,你可以做到。您应该使用java.net包来处理网络。
数据提取取决于您要从中获取数据的站点,例如:
答案 1 :(得分:1)
我在请求时获取库存数据,而不是计时器,但您可以查看我的代码并查看我如何获取库存数据。
这是JPanel的样子。它是右边的小组。
这是HistoricalDataRunnable类。
package com.ggl.stock.picker.controller;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import javax.swing.SwingUtilities;
import com.ggl.stock.picker.model.Company;
import com.ggl.stock.picker.model.StockDay;
import com.ggl.stock.picker.model.StockHistory;
import com.ggl.stock.picker.model.StockPickerModel;
import com.ggl.stock.picker.view.StockPickerFrame;
public class HistoricalDataRunnable implements Runnable {
private static final String URLString =
"http://www.google.com/finance/historical?output=csv&q=";
private Company company;
private StockPickerFrame frame;
private StockPickerModel model;
public HistoricalDataRunnable(StockPickerFrame frame,
StockPickerModel model, Company company) {
this.frame = frame;
this.model = model;
this.company = company;
}
@Override
public void run() {
InputStream is = null;
BufferedReader br = null;
try {
String symbol = company.getStockSymbol();
URL url = new URL(URLString + symbol);
URLConnection hc = url.openConnection();
hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; "
+ "Intel Mac OS X 10.4; en-US; rv:1.9.2.2) "
+ "Gecko/20100316 Firefox/3.6.2");
is = hc.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
processCSVFile(br);
} catch (MalformedURLException e) {
e.printStackTrace();
String message = e.getMessage();
message = "<html>" + message;
setMessageLabel(message);
} catch (IOException e) {
String message = e.getMessage();
message = "<html>" + message;
setMessageLabel(message);
} finally {
closeReaders(is, br);
}
}
private void processCSVFile(BufferedReader br) throws IOException {
String line = "";
int count = 0;
StockHistory history = new StockHistory(company);
while ((line = br.readLine()) != null) {
if (count > 0) {
StockDay stockDay = createStockDay(line);
if (stockDay != null) {
history.addStockDay(stockDay);
}
}
count++;
}
if (history.calculateNumbers()) {
model.addStockHistory(history);
addStockHistory();
setMessageLabel(" ");
} else {
String message = "<html>There is no data for "
+ company.getCompanyName();
setMessageLabel(message);
}
}
private StockDay createStockDay(String line) {
String[] parts = line.split(",");
if (parts[1].equals("-"))
return null;
double open = Double.valueOf(parts[1]);
double high = Double.valueOf(parts[2]);
double low = Double.valueOf(parts[3]);
double close = Double.valueOf(parts[4]);
long volume = Long.valueOf(parts[5]);
return new StockDay(parts[0], open, high, low, close, volume);
}
private void addStockHistory() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.addStockHistory();
}
});
}
private void setMessageLabel(final String text) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.setMessageLabel(text);
;
}
});
}
private void closeReaders(InputStream is, BufferedReader br) {
try {
if (br != null)
br.close();
if (is != null)
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
此类与Google建立网址连接,并返回历史股票信息。此信息在StockHistory实例中捕获,并存储在StockPickerModel实例中。
User-Agent属性设置为模拟浏览器。某些网站不允许程序访问其Web服务器。通过设置User-Agent属性,您可以伪装成Web浏览器。您的程序应该尊重Web服务器,而不是提交太多请求。多少取决于Web服务器。
此类还会更新视图。我们知道请求何时完成的唯一方法是HistoricalDataRunnable方法收到来自Google的响应。这个类可以更新模型和视图。
由于此类在单独的线程中运行,因此我们必须调用SwingUtilities invokeLater方法来执行任何Swing GUI命令。这就是addStockHistory和setMessageLabel方法包含在invokeLater方法中的原因。
此类显示JLabel消息中的任何错误。该股可能不会由Google保留。股票可能没有任何股票日值。将显示这些错误消息。
要查看其余代码,请查看我的Stock Picker Using Java Swing文章。