Zeit-Diagramm erstellen

Status
Nicht offen für weitere Antworten.

data89

Bekanntes Mitglied
Hallo,

ich möchte ein Digramm bauen, dass sich so wie die Diagramme (bei 2-Core 2 Diagramme) der CPU-Auslastung im Task-Manager verhält. Der Verlauf wandert immer weiter. Doch irgendwie weiß ich nicht mehr weiter.

Hier was ich bisher habe:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class DiagrammMain extends JFrame {
	
	private DPanel pan;


	public DiagrammMain() {
		Thread t = new ValueThinker(this);
		t.start();
		
		this.setTitle("Diagramm");
		this.setLayout(new BorderLayout());
		
		this.pan = new DPanel();
		
		this.add(this.pan, BorderLayout.CENTER);
		this.pack();
		this.setSize(200, 100);
		this.setVisible(true);
	}
	
	
	public void value(double v) {
		int a = (int) Math.round(v*100);
		this.pan.update(a);
		this.pan.repaint();
	}
	
	

	public class DPanel extends JPanel {

		int[] werte;
		
		int letzt = 0;
		int cnt = 0;
		int vcnt = 0;
		int[] vv;
		public DPanel() {
			this.werte = new int[10];
			this.vv = new int[200];
			for (int i = 0; i < this.vv.length; i++) {
				this.vv[i] = -1;
			}
		}
		
		public void paintComponent(Graphics g) {
			g.setColor(new Color(0, 0, 0));
			g.fillRect(0, 0, 200, 100);
			g.setColor(new Color(0, 150, 0));
			for (int i = 0; i < 10; i++) {
				g.drawLine(0, i*10, 200, i*10);
			}
			
			for (int i = 0; i < 20; i++) {
				g.drawLine(i*10+this.cnt, 0, i*10+this.cnt, 100);
			}
			g.setColor(new Color(0, 255, 0));
			int i = 1;
			while (this.vv[i] != -1) {
				g.drawLine(i-1, this.vv[i-1], i, this.vv[i]);
				i++;
			}
			
		}
		
		public void update(int a) {

			this.vv[this.vcnt] = a;
			this.vcnt++;
			
			if (this.cnt >= 8) {
				this.cnt = 0;
			} else {
				this.cnt++;
			}
		}
		
		
	}

	
	
	private class ValueThinker extends Thread {
		
		private DiagrammMain main;

		public ValueThinker(DiagrammMain d) {
			this.main = d;
		}
		
		public void run() {
			while (!this.isInterrupted()) {
				double v = Math.random();
				this.main.value(v);
				try {
					Thread.sleep(1000);
				} catch (Exception e) {
					return;
				}
			}
			return;
		}
		
	}
	
	
	public static void main(String[] args) {
		new DiagrammMain();
	}
}
Über update(...) sollen immer die neuen Werte eingegeben werden können. Doch nun weiß ich nicht mehr weiter, wie ich weitermachen soll.

Habt Ihr ein Paar Tipps?

data89
 
S

SlaterB

Gast
was ist denn deine Frage?
wie du überhaupt die CPU-Belastung messen kannst? 3%, 30%, 300%?
das wüßte ich auch gerne, dazu ist dein Code aber völlig egal,
das wäre nur ein Befehl, den man kennen müßte, falls es ihn überhaupt gibt,

oder gehts um das Diagramm, dann ist die Art der Werte ja egal,
 

data89

Bekanntes Mitglied
Achso, es geht mir nicht um die Messung der CPU-Leistung (man brauch ja das Rad nicht zweimal zu erfinden;-)), sondern es geht mir darum eine Klasse zu erstellen, die ein solches Diagramm ist und die ich dann in meinen Projekten benutzen kann um kontinuierliche zeitliche Prozesse darzustellen.

oder gehts um das Diagramm, dann ist die Art der Werte ja egal,
Genau!

Das Grundgerüst steht ja schon (siehe Code). Doch wie bringe ich da nun die Werte drauf? Wie sorge ich dafür, dass sich auch die Werte mit verschieben? Gibt es da Tricks, die man beachten sollte? In welche Richtung sollte der Bereich laufen?

P.S.: Wen es interessiert, wie man mit Java die CPU-Belastung ausliest, der siehe hier: Profiling CPU usage from within a Java application - JavaWorld
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ich habe dein Programm laufen lassen und da ist doch mit der Zeit schon ordentlich Bewegung, wie im Taskmanager,
funktioniert doch?
nochmal: was ist die Frage?

> Gibt es da Tricks, die man beachten sollte? In welche Richtung sollte der Bereich laufen?

gut, das ist wohl zum Teil nicht sehr konkret ;)

-----

falls das Array vv und die Anzeige irgendwann voll sind, kannst du ja die Werte im Array verschieben
oder speicherschonender den Startwert verschieben
(einmal zu sagen 'fange bei Position 5 an' ist schneller als 1000 Werte um 5 Positionen nach links zu setzen)
 
Zuletzt bearbeitet von einem Moderator:

data89

Bekanntes Mitglied
Ich bekomme es nicht hin, dass die Werte "mit laufen" und dann irgendwann verschwinden. Außerdem muss ja die Durchlaufrichtung von rechts nach links sein, oder?
 
S

SlaterB

Gast
okok, hier diverse Ideen neu eingebaut:
Java:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        new DiagrammMain();
    }


}


class DiagrammMain
    extends JFrame
{

    private DPanel pan;


    public DiagrammMain()
    {
        setTitle("Diagramm");
        setLayout(new BorderLayout());

        this.pan = new DPanel();

        add(this.pan, BorderLayout.CENTER);
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(200, 100);
        setVisible(true);

        Thread t = new ValueThinker(this);
        t.start();
    }


    public void value(double v)
    {
        int a = (int)Math.round(v * 60);
        this.pan.update(a);
        this.pan.repaint();
    }


    public class DPanel
        extends JPanel
    {

        int[] werte;

        int letzt = 0;
        int cnt = 0;
        int vvIndex = 0;
        int[] vv;
        boolean shiftVVIndex = false;
        int startValuesPos;

        public DPanel()
        {
            this.werte = new int[10];
            this.vv = new int[100];
            for (int i = 0; i < this.vv.length; i++)
            {
                this.vv[i] = -1;
            }
        }

        Color c1 = new Color(0, 0, 0);
        Color c2 = new Color(0, 150, 0);
        Color c3 = new Color(0, 255, 0);

        public void paintComponent(Graphics g)
        {
            g.setColor(c1);
            g.fillRect(0, 0, 200, 100);
            g.setColor(c2);
            for (int i = 0; i < 10; i++)
            {
                g.drawLine(0, i * 10, 200, i * 10);
            }

            for (int i = 0; i < 20; i++)
            {
                g.drawLine(i * 10 - this.cnt, 0, i * 10 - this.cnt, 100);
            }
            g.setColor(c3);
            int i = 1;
            while (i < this.vv.length && this.vv[i] != -1)
            {

                int index1 = ((shiftVVIndex ? vvIndex : 0) + i - 1) % vv.length;
                int index2 = ((shiftVVIndex ? vvIndex : 0) + i) % vv.length;
                int x = 150 + i - 1 - startValuesPos;
                g.drawLine(x, this.vv[index1], x + 1, this.vv[index2]);
                i++;
            }

        }

        public void update(int a)
        {
            this.vv[this.vvIndex] = a;
            if (this.vvIndex >= this.vv.length - 1)
            {
                this.vvIndex = 0;
                shiftVVIndex = true;
            }
            else
            {
                this.vvIndex++;
            }
            if (this.cnt >= 8)
            {
                this.cnt = 0;
            }
            else
            {
                this.cnt++;
            }
            if (startValuesPos < this.vv.length)
            {
                startValuesPos++;
            }
        }


    }


    private class ValueThinker
        extends Thread
    {

        private DiagrammMain main;

        public ValueThinker(DiagrammMain d)
        {
            this.main = d;
        }

        public void run()
        {
            double v = Math.random();
            while (!this.isInterrupted())
            {

                while (true)
                {
                    double newV = v + (Math.random() / 5) - 0.1;
                    if (newV > 0 && newV < 1)
                    {
                        v = newV;
                        break;
                    }
                }
                this.main.value(v);
                try
                {
                    Thread.sleep(100);
                }
                catch (Exception e)
                {
                    return;
                }
            }
            return;
        }

    }


    public static void main(String[] args)
    {
        new DiagrammMain();
    }
}
 

data89

Bekanntes Mitglied
Hallo,

was haltet Ihr von meinem (Teil-)Ergebnis im Anhang? Es ist erstmal durch die Zufallszahlen sehr verwirrend!
Ach ja, wie nennt man eigentlich genau diese Zwei Diagrammtypen?

data89
 
Zuletzt bearbeitet:

kowa

Aktives Mitglied
Sieht doch gut aus!

Würde mich interessieren, wenn du das mit JNI und dem C code auch für mehrere CPUs hinbekommst.

Diagrammtypen? Das eine ist ein Balkendiagramm, das andere ein Kurvendiagramm.
 

data89

Bekanntes Mitglied
Diagrammtypen? Das eine ist ein Balkendiagramm, das andere ein Kurvendiagramm.
Hätte ja sein können, dass es da besondere Bezeichnungen gibt!

Würde mich interessieren, wenn du das mit JNI und dem C code auch für mehrere CPUs hinbekommst.
Eingtlich hatte ich es garnicht im Sinn damit die CPU-Auslastung darzustellen. Ich wollte damit "Kenngrößen" im Netzwerk darstellen (doch dazu habe ich noch einige Fragen, die ich noch stellen muss - aber im Netzwerkunterforum ;-))

Aber nochmal drei Fragen:
1. Gibt es soetwas wie Anti-Alias für das Kurvendiagramm?
2. Könnte man das noch irgendwie erweitern? (Noch ein Paar besondere Spielereien dranbauen - hat jemand eine Idee?)
3. Die Softwarearchitektur ist ja nich besonders schön: alles an Logik wurde in paintComponent(...) gepackt. Gibt es da elegantere Wege, das zu realisieren?

data89
 
Zuletzt bearbeitet:

Marco13

Top Contributor
1. Mit
((Graphics2D)g).setRenderingHint(RenderingHints.KE Y_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
in der paintComponent kann man AntiAliasing einschalten
2. Ja, labels an den Punkten, Zoom- und Scrollfunktion, Mehrere Kurven (ohne dein Programm gesehen zu haben - irgendwas davon wird es sicher noch nicht unterstützen)
3. Ja. (Für eine präzisere Antwort müßt' ich mir's mal ansehen...
 

data89

Bekanntes Mitglied
3. Ja. (Für eine präzisere Antwort müßt' ich mir's mal ansehen...
Also die Architektur ist wie in der von mir geposteten Klasse DPanel realisiert. Und wie kann man die Architektur eleganter gestalten?
 

kowa

Aktives Mitglied
Hast du dir mal das ganze unter Linux oder OpenSolaris angesehen?

Ich finde da sieht es vieeeeel besser aus als in WinXP! Die haben da kleinerer Intervalle genommen, also nicht jede Sekunde rutscht der Graph weiter, sondern quasi in Echtzeit. Außerdem ist das heller gestaltet und farblich schöner (Grün auf Schwarz wäre nicht mein Geschmack).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Zeit Optimierung - bzw. ms Optimierung Allgemeine Java-Themen 35
J Message Box soll bei bestimmter Zeit angezeigt werden Allgemeine Java-Themen 19
K CET-Zeit benutzen Allgemeine Java-Themen 6
K Geschätze Zeit implementieren Allgemeine Java-Themen 14
Blender3D AWT Fehlerhafte Zeit bei Calender und Date DateFormat Allgemeine Java-Themen 8
2 Joda Time - Localtime mit anderer Zeit vergleichen? Allgemeine Java-Themen 1
O Java Hardware Software Zeit Allgemeine Java-Themen 7
H Bestimmte Aufgaben zur bestimmter Zeit/ in bestimmten Intervallen Allgemeine Java-Themen 3
F Zeit ermitteln Allgemeine Java-Themen 2
Q Zeit in GUI selbst aktualisieren Allgemeine Java-Themen 5
D Klassen Zeit aus NMEA-Stream in SimpleDateFormat Allgemeine Java-Themen 17
M AudioClip in Spiel mehrfach in kurzer Zeit abspielen Allgemeine Java-Themen 3
N java.util.Date - Zeit auf 00:00 setzen Allgemeine Java-Themen 3
R Raum und Zeit Allgemeine Java-Themen 11
S Zeit Allgemeine Java-Themen 4
Z zeit zwischen maus drücken und loslassen Allgemeine Java-Themen 7
T Methodenparameter zur Compile-Zeit überprüfen Allgemeine Java-Themen 8
J Lizenz auf Zeit Allgemeine Java-Themen 8
X Codeabarbeitung innerhalb des Hauptprogramms für bestimmte Zeit unterbrechen Allgemeine Java-Themen 2
prakdi Zeit zum Durchlauf der Schleifen unverständlich!? Allgemeine Java-Themen 3
A JavaVM Zeit Windows 7 Allgemeine Java-Themen 9
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
C Leerzeilen verbrauchen Zeit! Allgemeine Java-Themen 5
J Datum und Zeit Allgemeine Java-Themen 4
G JComboBox getSelectedItem Zeit Allgemeine Java-Themen 5
Kr0e Sekunden -> Zeit Allgemeine Java-Themen 14
T Mit Datum und Zeit rechnen Allgemeine Java-Themen 8
B System CPU Zeit / Last auslesen Allgemeine Java-Themen 2
J zeit überscheidungen ermitteln Allgemeine Java-Themen 6
P Thread Demonstrationr eist durch die Zeit Allgemeine Java-Themen 4
A Compilierdatum/Zeit in Code eingenerieren Allgemeine Java-Themen 13
Kidao Wie ordne ich die aktuelle Zeit in einer Zeitreihe eine? Allgemeine Java-Themen 6
J zeit stoppen Allgemeine Java-Themen 11
M Zeit eines rechners im netzwerk ermitteln Allgemeine Java-Themen 6
B Aktuelle Zeit im Format YYYY-MM-DD HH-MM-SS in Logfile schre Allgemeine Java-Themen 8
C Umrechnung der Zeit Allgemeine Java-Themen 8
B 2 JList instanzen wo nur einer zur selben Zeit selektierbar? Allgemeine Java-Themen 8
I Thread eine bestimmte Zeit zur Ausführung geben Allgemeine Java-Themen 2
P Zeit messen Allgemeine Java-Themen 16
M Zeit läuft rückwärts Allgemeine Java-Themen 3
K Thread Safe Zeit Messung Allgemeine Java-Themen 2
D Programmunterbrechung für eine bestimmte Zeit (Millisikunden Allgemeine Java-Themen 10
K ServerSocket benötigt unmengen an Zeit Allgemeine Java-Themen 7
D Zeit messen Allgemeine Java-Themen 2
G try auf zeit Allgemeine Java-Themen 8
R Garbage Collector rennt die ganze Zeit Allgemeine Java-Themen 7
M Fortschritt: verbleibende Zeit errechen. Allgemeine Java-Themen 2
F Zeit errechnen mit GregorianCalendar Allgemeine Java-Themen 8
F vergangene Zeit berechnen Allgemeine Java-Themen 6
A Unix Zeit Allgemeine Java-Themen 2
D Datum und Zeit - Date, Calendar oder GregorianCalender ? Allgemeine Java-Themen 13
X Parameter bei Start über Batch-Datei übergeben(Tag und Zeit) Allgemeine Java-Themen 3
C Vergangene Zeit seit Anwendungsstart messen Allgemeine Java-Themen 5
T Zeit aufaddieren Allgemeine Java-Themen 3
T zeit in java Allgemeine Java-Themen 4
J Power Point erstellen inklusive Diagramm Allgemeine Java-Themen 12
S Best Practice Diagramm zeichnen Allgemeine Java-Themen 0
El_Lobo 2D-Grafik Empfehlung für Diagramm-Erstellungs-Lib Allgemeine Java-Themen 2
T JFreeChart Diagramm speichern - Problem mit ImageIO nach Projektexport Allgemeine Java-Themen 3
J Werkzeug zur Datenanalyse von CSV nach Diagramm Allgemeine Java-Themen 7
F Klassendiagramm / UML Diagramm automatisch erstellen Allgemeine Java-Themen 3
M Diagramm mit JfreeChart Allgemeine Java-Themen 8
B Komplettes Projekt als UML Diagramm mit eUML...geht das? Allgemeine Java-Themen 10
hdi Frage zu UML Klassen-Diagramm Allgemeine Java-Themen 8
G diagramm drucken Allgemeine Java-Themen 3
H Java Applet Diagramm (Chart) Allgemeine Java-Themen 11
S Diagramm erstellen Allgemeine Java-Themen 4
G Diagramm darstellen mit Javascript Allgemeine Java-Themen 41
G diagramm um Zustände darstellen zu können Allgemeine Java-Themen 5
L Excel Diagramm Erstellen Allgemeine Java-Themen 2
Ark Diagramm zur Java-Grammatik gesucht Allgemeine Java-Themen 2
N Diagramm beschriften, Servlet Allgemeine Java-Themen 5
J UML Diagramm erstellen Allgemeine Java-Themen 2
T Linien-Diagramm zeichnen Allgemeine Java-Themen 9
Zrebna Testkonzept erstellen - Verständnisschwierigkeiten Allgemeine Java-Themen 6
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
berserkerdq2 SceneBuilder GUI erstellt, nun muss ich noch ein Polygon erstellen, ist die Connection möglich? Allgemeine Java-Themen 3
berserkerdq2 Was heißt es mit FXML Listener zu setzen ind Buttons zu erstellen? Allgemeine Java-Themen 6
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
D Open Source Library zum erstellen von PDFs Allgemeine Java-Themen 1
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
N Tree erstellen Allgemeine Java-Themen 8
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
berserkerdq2 Kann keine Labels erstellen, was ist hier syntaktisch falsch Allgemeine Java-Themen 5
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Trace-Tabelle erstellen Allgemeine Java-Themen 3
M Excel Datei Erstellen Allgemeine Java-Themen 2
OnDemand Erstellen von Quartz Jobs pro Aufgabe oder zusammenfassen Allgemeine Java-Themen 7
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
R Geometry erstellen die abhängig von Variablen ist Allgemeine Java-Themen 6
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
Avalon DTO aus mehrere Entitäten erstellen Allgemeine Java-Themen 5
Kirby.exe Distanz Map für die Distanztransformation erstellen Allgemeine Java-Themen 1
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben