私はGWTを初めて使用し、大きな問題を抱えています。gwt/extjs gwt2.2.0 アプリがあります。毎秒の着信メッセージの量に関するリアルタイム情報を表示するグラフを作成する必要があります。システムモニターのようなもの。私が見つけた唯一の方法は、サーバーから messageQueueSize を呼び出すコードを追加し、それをエリア チャートに追加して timer.shedule(1000) でタイマー ブロックに追加することです。
$while(true)
ブロック。アプリケーションを実行しようとすると、アプリケーションがループします (While がすべてのスレッドを占有するため)。この問題を解決するか、アプリのこの部分を実現するためのアイデアを見つけるのを手伝ってください。これが私がやろうとしていることのコードです:
$ public class ExampleChart extends ContentPanel{
ArrayList<String> timeList = new ArrayList<String>();
ArrayList<Long> queueSize = new ArrayList<Long>();
private final ServerManagementAsync serverManagementSvc = GWT.create(ServerManagement.class);
public ContentPanel createChart(final String customerId, boolean warrant){
setHeading("Messages by domain");
setFrame(true);
setSize(550, 400);
setLayout(new FitLayout());
String url = "/gxt/chart/open-flash-chart.swf";
final Chart chart = new Chart(url);
chart.setBorders(true);
timeList = getTimeList(timeList);
while (warrant){
Timer t = new Timer(){
public void run(){
ExampleChart ec = new ExampleChart();
AsyncCallback<Long> ac = new AsyncCallback<Long>() {
@Override
public void onFailure(Throwable throwable) {
}
@Override
public void onSuccess(Long integer) {
timeList = getTimeList(timeList);
if (queueSize.size()<11){
queueSize.add(integer);
} else{
for (int i = 0; i<queueSize.size()-1; i++){
queueSize.set(i,queueSize.get(i+1));
}
}
chart.setChartModel(getAreaChart(timeList, queueSize));
add(chart);
repaint();
}
};
serverManagementSvc.getMessageQueueSize(customerId, ac);
}
};
t.schedule(2000);
}
chart.setChartModel(getAreaChart(timeList, queueSize));
add(chart);
repaint();
return this;
}
public ArrayList<String> getTimeList(ArrayList<String> TimeList){
ArrayList<String> timeList = TimeList;
if (timeList.size() < 11){
timeList.add(getCurrentTime());
} else {
for (int i = 0; i<timeList.size()-1; i++){
timeList.set(i, timeList.get(i+1));
}
timeList.set(10, getCurrentTime());
}
return timeList;
}
public String getCurrentTime(){
Date date = new Date();
String hrs = Integer.toString(date.getHours());
String min = Integer.toString(date.getMinutes());
String sec = Integer.toString(date.getSeconds());
return hrs + ":" + min + ":" + sec;
}
public ChartModel getAreaChart(ArrayList<String> dateList, ArrayList<Long> queueSize)
{
ChartModel cm = new ChartModel("Messages per domain", "font-size: 14px; font-family: Verdana;");
cm.setBackgroundColour("#ffffff");
XAxis xa = new XAxis();
xa.setLabels(dateList);
cm.setXAxis(xa);
AreaChart area1 = new AreaChart();
area1.setFillAlpha(0.3f);
area1.setColour("#ff0000");
area1.setFillColour("#ff0000");
for (int n = 0; n<queueSize.size(); n++){
area1.addValues(queueSize.get(n));
}
cm.addChartConfig(area1);
return cm;
}
}