如何使用SwingWorker? [英] How to use SwingWorker?
问题描述
朋友们,我正在开发一个java应用程序。这是性能监测。因为我在一个类中获取值并在另一个类中绘制图形。我想使用swingworker来执行这两个类。
Friends, i am developing a java application. Thats for performance monitoring. on that i am getting values in one class and drawing a graph in another class. i want to use swingworker to perform those two class alternatively.
ResultSet rs;
Connection conn = null;
conn = (Connection)getMySqlConnection();
Statement st = conn.createStatement();
rs = st.executeQuery("SHOW GLOBAL STATUS");
while(rs.next())
{
Map_MySql.put(rs.getString(1), rs.getString(2));
}
conn.close();
上面用于收集服务器状态并将其存储在哈希映射中的类。这个类称为MySQLClass。
Above class for collecting server status and store it in hash map. this class called as "MySQLClass".
System.out.println("Graph Occur");
XYDataset Dataset;
TimeSeries Series = new TimeSeries("Random Data");
Second sec = new Second();
ChartPanel CPanel;
if(Operation_Combo.getSelectedItem().toString() == "MySQL")
{
if(MySQLClass.Map_MySql.get(""+MainWindow.SelectedNode+"") == null)
{
Value = 0;
}
else
{
Value = Integer.parseInt(MySQLClass.Map_MySql.get(""+MainWindow.SelectedNode+""));
}
System.out.println(Value);
}
if(Operation_Combo.getSelectedItem().toString() == "SQL Server")
{
if(SqlServerClass.Map_SQLServer.get(""+MainWindow.SelectedNode+"") == null)
{
Value = 0;
}
else
{
Value = Integer.parseInt(SqlServerClass.Map_SQLServer.get(""+MainWindow.SelectedNode+""));
}
System.out.println(Value);
}
String CounterName = MainWindow.SelectedNode.toString();
Series.add(sec, Value);
Dataset = new TimeSeriesCollection(Series);
Chart = ChartFactory.createTimeSeriesChart(CounterName, "Time", "Range", Dataset, true, false, false);
XYPlot Plot = (XYPlot)Chart.getPlot();
Plot.setBackgroundPaint(Color.LIGHT_GRAY);
Plot.setDomainGridlinePaint(Color.WHITE);
Plot.setRangeGridlinePaint(Color.RED);
CPanel = new ChartPanel(Chart);
Panel1.revalidate();
Panel1.add(CPanel);
System.out.println("Chart Added");
Panel1.validate();
Panel1.repaint();
Thread.sleep((int)MainWindow.Interval_Combo.getSelectedItem() * 1000);
System.out.println("Sleep="+((int)MainWindow.Interval_Combo.getSelectedItem() * 1000));
System.gc();
以上是在一个名为Graph的类中绘制Graph的代码。
我如何使用swing worker来交替执行此操作并在每次迭代中绘制图形。如果你知道请帮助我。
Above is the code for drawing Graph in one class called "Graph". How can i use swing worker to perform this alternatively and draw graph in every iteration. if you know help me please.
推荐答案
首先,我只是从 MySQL.execute调用doInBackground()函数(); 使用此。然后在 doInBackground()函数中,我只是收集这些计数器值并使用 publish(); 函数来传递值。在这里我只是通过标志来表示数据已成功收集。
发布(GraphLock);
At first, i just call the doInBackground() function from MySQL.execute(); using this. And then in doInBackground() function , i just collect those counter values and use publish(); function to passcertain value. here i just pass flag to denote data's were collected successfully. publish(GraphLock);
调用Publish()后;方法,进程(列表块)方法被调用。在那我只是检查条件并调用Graph类来生成图形。
After calling the Publish(); method, Process(List chunks) method get invoked. On that i just check the condition and call the Graph class to generate the graph.
if(GraphLock==true)
SwingUtilities.invokeLater(new Graph());
它运作正常......
It works properly...
这篇关于如何使用SwingWorker?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!