मेरे पास एक ऐसा एप्लिकेशन है जो एक सेकंड को 5 से 50 गुना के बीच एक चर अद्यतन करता है और मैं वास्तविक समय में इस परिवर्तन की निरंतर XY साजिश को चित्रित करने का कोई तरीका ढूंढ रहा हूं।जावा में रीयल-टाइम ग्राफ़िंग
हालांकि इस तरह की उच्च अद्यतन दर के लिए JFreeChart की अनुशंसा नहीं की जाती है, फिर भी कई उपयोगकर्ता कहते हैं कि यह उनके लिए काम करता है। मैंने this डेमो का उपयोग करने का प्रयास किया है और इसे एक यादृच्छिक चर प्रदर्शित करने के लिए संशोधित किया है, लेकिन ऐसा लगता है कि यह हर समय 100% CPU उपयोग का उपयोग करता है। यहां तक कि अगर मैं इसे अनदेखा करता हूं, तो भी मैं फॉर्म बनाने के लिए जेएफरी चार्ट की यूई कक्षा तक सीमित नहीं होना चाहता (हालांकि मुझे यकीन नहीं है कि इसकी क्षमताओं वास्तव में क्या हैं)। जावा के "फॉर्म" और ड्रॉप-डाउन मेनू के साथ इसे एकीकृत करना संभव होगा? (जैसा वीबी में उपलब्ध है) अन्यथा, क्या कोई विकल्प है जिसे मैं देख सकता हूं?
संपादित करें: मैं स्विंग करने के लिए नए हूँ, इसलिए मैं एक साथ एक कोड डाल दिया है बस (जबकि JFree की ApplicationFrame वर्ग का उपयोग न करें, क्योंकि मुझे यकीन है कि कैसे नहीं कर रहा हूँ इसके साथ JFreeChart की कार्यक्षमता का परीक्षण जो स्विंग के कॉम्बो बॉक्स और बटन के साथ काम करेगा)। अभी, ग्राफ तुरंत अद्यतन किया जा रहा है और सीपीयू उपयोग उच्च है। क्या नए मिलीसेकंड() के साथ मूल्य बफर करना संभव होगा और इसे दो बार दो बार अपडेट करना होगा? साथ ही, क्या मैं JFreeChart को बाधित किए बिना शेष जेएफआरएएम में अन्य घटक जोड़ सकता हूं? मुझे यह कैसे करना है? frame.getContentPane()। जोड़ें (नया बटन ("क्लिक करें")) ग्राफ को ओवरराइट करने लगता है।
package graphtest;
import java.util.Random;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
public class Main {
static TimeSeries ts = new TimeSeries("data", Millisecond.class);
public static void main(String[] args) throws InterruptedException {
gen myGen = new gen();
new Thread(myGen).start();
TimeSeriesCollection dataset = new TimeSeriesCollection(ts);
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"GraphTest",
"Time",
"Value",
dataset,
true,
true,
false
);
final XYPlot plot = chart.getXYPlot();
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(60000.0);
JFrame frame = new JFrame("GraphTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ChartPanel label = new ChartPanel(chart);
frame.getContentPane().add(label);
//Suppose I add combo boxes and buttons here later
frame.pack();
frame.setVisible(true);
}
static class gen implements Runnable {
private Random randGen = new Random();
public void run() {
while(true) {
int num = randGen.nextInt(1000);
System.out.println(num);
ts.addOrUpdate(new Millisecond(), num);
try {
Thread.sleep(20);
} catch (InterruptedException ex) {
System.out.println(ex);
}
}
}
}
}
यह एक अच्छा विचार की तरह लगता है, हालांकि मैं भी टाइमस्टैम्प किसी तरह का बफ़र होना होगा। हालांकि, जेएफरी चार्ट 100% सीपीयू उपयोग लेता है चाहे मेरे पास हर सेकेंड में 2 या 50 अपडेट हों। – thodinc
ठीक है, यह काफी कुछ कर रहा है - ग्राफ को हर बार स्क्रैच से पुन: उत्पन्न करना। इसलिए मैं थोड़ी कम बार-बार अद्यतन करने की सिफारिश करता हूं (बेशक यह आपकी मशीन और आपके अतिरिक्त भार पर निर्भर करता है ...) –