Oszilloskop in Java

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Morjen!

    Dir sollte klar sein, dass alles was ich spontan "aus dem Putzlappen geschüttelt habe", nicht gleich hoch optimiert ist.

    copyArea() bildet wie der Name schon sagt eine runtime eine deep Copy der Bitmap zur Verarbeitung. Und das kostet Zeit, deshalb das arbeiten mit dem Iterator als "Pointer" (ich sagte doch ich bin chronischer Cpp-ler )

    IMHO wird das ploten von Punkten und Linien und dem zugehörigen Überschreiben, die schnellste Variante sein. Wenn auch nicht die bequemste.

    Was ist überhaupt schnell?! - Bei welchen CPU Takt? - 15ms sind in Java eigentlich nicht viel. Ich würde ein paar JUnit Testcase mehr implementieren und den Code auch ordentlich refaktoisieren.

    cu

    Blaster
    Yuppi, endlich Elite ...

    Kommentar


    • #17
      So wirklich richtig verstehe ich ja nicht was du sagst ...

      also was ich jetzt gemacht habe und was bis hierher auch recht gut funktioniert:
      die messwerte kommen in ein array, die ich dann mit drawPolyline auf Graphics2D von dem BI zeichne. (eigentlich kommen sie in eine ArrayList aus der ich vor dem zeichnen ein array mache)
      Bei jedem neuen Messwert, werden die werte im array 1 nach links verschoben (aus[1] wird [0] usw.)

      Die Sachen mit dem DataSet etc. wollten nicht in meinen kleinen Kopf rein.

      Mein Problem ist aber noch folgendes.
      Das Image kommt auf Graphics von einem JPanel, das wiederum auf der ContentPane von einem JInternalFrame sitzt.
      Die Klasse extends JinternalFrame und implements Runnable.
      Das Zeichnen etc. läuft in run() ab.

      Wenn der Thread nicht mehr läuft, und ich mache irgendwas an dem sch*** InternalFrame, dann is das BI weg, und egal was ich bisher auch angestellt habe bzgl. InternalFrameListener ... bis auf ein kurzes Flackern seh ich nie wieder was von dem Image

      Vielleicht hast du dazu auch 'ne Idee?

      Kommentar


      • #18
        Wenn ich einen AncestorListener nehme und bei ancestorMoved das Image neu zeichne, funktioniert es, wenn ich den InternalFrame verschiebe.
        Bei den zusatzlichen InternalFrameListener, kann ich bei internalFrameDeactivated etc. das gleiche hinschrieben, das Resultat ist nur ein kurzes Flackern des Images, dann ist es auch schon wieder weg.

        Beide Listener sind zu this (also einem InternalFrame geadded). Das kann's doch auch nicht sein, dass es einmal funktioniert und das andere mal nicht!?

        Kommentar


        • #19
          Hi!

          Sorry! - War jetzt ein paar Tage "auf Montage".

          Original geschrieben von graf
          So wirklich richtig verstehe ich ja nicht was du sagst ...
          Was?! JUnit und Refaktorisierung?!
          Oh, Sorry! - Naja, so "grün" scheinst Du ja nicht zu sein, deshalb hatte ich etwas "höher angelegt".

          JUnit - http://www.junit.org/index.htm

          Um mehr darüber zu erfahren, wozu es gut ist:
          http://www.andrena.de/Objektforum/Ar...irstAnsatz.pdf
          http://www.artima.com/intv/testdriven.html

          Refactoring (Refaktorisierung):
          Du kennst das sicher: Da hat man tagelang an eine Klasse gestrickt, die endlich genau die Funktionalität gewährleistet, die man haben wollte und schon muss den Code wieder auf den Kopf stellen, weil er schnell genug ist, schlecht strukturiert, völlig unübersichlich etc. Man schon hat schon fast "Angst davor" kritische Bereiche des Codes anzufassen. Rectoring beschreiben Techniken und Regeln wieder, wie man Schritt f. Schritt vom Ist-Zustand in den Sollzustand gelangt, ohne dass sich das äußere Verhalten deiner Klasse je ändert.
          Wenn Dich das interessiert, in aktuellen OBJEKTspektrum Nr.3 2003 beschäftigt sich überwiegend mit, diesen Thema.
          Warnung: Die Zeitschrift ist ziemlich anspruchsvoll, weil dei Autoren überwiegend "Großkampfkaliber" in der Softwareentwicklung sind:
          http://www.sigs-datacom.de/sd/publications/os/index.htm
          Es gibt auch ein Standardwerk dazu: http://www.refactoring.com/

          Ich dachte einfach - 'Du kennst das alles' - weil mir die Laufzeit in ms angeben konntest.
          Original geschrieben von graf
          also was ich jetzt gemacht habe und was bis hierher auch recht gut funktioniert:
          die messwerte kommen in ein array, die ich dann mit drawPolyline auf Graphics2D von dem BI zeichne. (eigentlich kommen sie in eine ArrayList aus der ich vor dem zeichnen ein array mache)
          Bei jedem neuen Messwert, werden die werte im array 1 nach links verschoben (aus[1] wird [0] usw.)

          Die Sachen mit dem DataSet etc. wollten nicht in meinen kleinen Kopf rein.
          Macht nix .. hört sich doch ganz gut an.
          Ich wollte mit Polygonen arbeiten, weil Du bei einen Oszilloskop nicht nur funktionale Linien hast, sondern auch z.B. Hysterese- oder Tesla-Schleifen.

          Original geschrieben von graf
          Mein Problem ist aber noch folgendes.
          Das Image kommt auf Graphics von einem JPanel, das wiederum auf der ContentPane von einem JInternalFrame sitzt.
          Die Klasse extends JinternalFrame und implements Runnable.
          Das Zeichnen etc. läuft in run() ab.

          Wenn der Thread nicht mehr läuft, und ich mache irgendwas an dem sch*** InternalFrame, dann is das BI weg, und egal was ich bisher auch angestellt habe bzgl. InternalFrameListener ... bis auf ein kurzes Flackern seh ich nie wieder was von dem Image

          Vielleicht hast du dazu auch 'ne Idee?
          Ja, man sollte hier die Anhängigkeiten erstmal klarstellen:
          Graphics extends java.awt*;
          BI extends java.awt.image.*;
          JPanel extends javax.swing;
          JInternalFrame extends JComponent (javax.swing) implements Accessible, RootPaneContainer, WindowConstants;

          So - Swing erbt von AWT. Und jetzt gibst Du mit deiner Instanz von JInternalFrame extends Runnable einen eigenen Thread. D.h. die Verbindung über das JComponent wird nicht mehr synchroniziert. Die Gabrage löscht dann das ThreadObjekt deiner BI .
          Die meisten Swing-Komponenten speichern Ihre Zustandsinformationen in einen Modellobjekt. Die Methoden, die dieses Zustandsobjekt steuern
          implementieren müssen, sind in diversen Interfaces definiert, die Ihrerseits von diversen konkreten oder abstrakten Klassen implementiert werden.
          (s. API-Doc)

          Wenn Du jetzt neue Swing-Listener bildest und "den InternalFrame verschiebe" , bildest Du wieder ein Thread aus AWT (neue Instanz). Und nach einer kurzen Fummelre (Thread-Übergabe)i wir es wieder dunkel ...

          cu

          Blaster
          Yuppi, endlich Elite ...

          Kommentar

          Lädt...
          X