Seite 2 von 2

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Sa Feb 19, 2011 1:43 pm
von js
Also das, was die Klasse Timer (http://download.oracle.com/javase/6/doc ... Timer.html) etwas eleganter löst, nicht durch warten sondern durch gezieltes Aufrufen. Für Nicht-Swing Operationen ist sie ohnehin besser geeignet als der Swing-Timer, der immer im Event-Thread läuft. Er läuft auch genauer.

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: So Feb 20, 2011 7:53 pm
von xxJohnxx
abrixas hat geschrieben:Habe es bei mir probiert, egal welches Tempo, die Laufschrift springt im Takt weiter (zwischen 1-2 sec).
Wenn das Tool läuft (Start) ist ein Kern bei 100 %.

Mac OS 10.6.6
Kann ich nur bestätigen.

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 6:07 pm
von matej
So dann habe ich das jetzt nochmal mit util.Timer.
Sowie etwas modifiziertem Menü.

http://www.file-upload.net/download-324 ... n.jar.html

Hoffe das mit den 100% ist weg.
Bitte mal nachsehen.

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 6:32 pm
von LotharImKeller
Kannst Du ja auch mal auf den SVN-Server packen. Siehe unter: http://www.stellwerksim.de/forum/viewto ... 17#p125817

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 6:34 pm
von matej
Stehe schon mit js im Kontakt.

Will mir dort was anlegen.

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 7:19 pm
von xxJohnxx
Hi,

Nach dem öffnen des Programms, sorgt es für ca 6% CPU-Auslastung. Nach klicken auf 'Start' kommt es auf ca. 36% bei Tempo 25 (variiert je nach Geschwindigkeit des Textes. Schneller Text = Höhere Auslastung; Langsamer Text = Niedrigere Auslastung). Die Darstellung ist nun jedoch flüssig, und gut lesbar.

Gruß John

EDIT: Beim Tempo 50 liegt die CPU Auslastung nur noch bei 26%, bei Tempo 20 liegt sie bei 71%.

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 7:39 pm
von matej
Das ist dann leider sehr anhängig vom PC.

Habe aber auch die Erfahrung gemacht, dass MacOS irgendwie dazu neigt auch Werte über 100% anzuzeigen.
Heißt die Auslastung bedeutet dort war anderes, aber frage mich nicht was.

Ich bekomme bei Tempo 10 nichtmal 1% CPU hin.
Ist aber auch ein Intel Core 2 Quad Q9550 mit 4x2,83 GHz.


Wie sieht es bei anderen MacOS Nutzeren aus?

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 7:44 pm
von LotharImKeller
Vielleicht solltest Du die Anwendungen auch mal unter anderen Umgebungen testen. Hat ja nicht jeder direkt einen Quad-Core da stehen. Und mit einer virtuellen Maschine solltest Du alle Betriebssysteme auch testen können.

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 8:03 pm
von xxJohnxx
Hi,

Ich möchte noch hinzufügen das mein Mac einen 2.53 GHz Intel Core 2 Duo Prozessor hat. Zwar schon 1 1/2 Jahre alt, läuft aber immer noch super.
Ich vermute mal das eine CPU Auslastung bei über 100% beim Mac eventuell mit einer 'Turboboost' Funktion (Übertaktung einzelner Kerne der CPU) des Prozessors zusammenhängt.

Gruß John

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 8:21 pm
von matej
Mache das Zeichnen mit repaint.

Gibt es da was sparsameres?
Man möge sich auch den Quelltext dazu ansehen.
Entweder in SVN oder hier:

Code: Alles auswählen

  public void paint( Graphics g ){
    if(erstesMal<2){
      super.paint(g);
      g.setColor(Color.DARK_GRAY);
      g.fillRect(links-pG/2,oben-pG/2,pG*(pA+1),(pG*1)+(pG*7));
      for(int i=0;i<pA;i++){
        g.setColor(Color.GRAY);
        for(int u=0;u<7;u++){
          g.setColor(Color.GRAY);
          g.fillOval(links+(i*pG),oben+(u*pG),pG,pG);
        }
      }
      erstesMal++;
    }    
    if(meinText.size()>1){
      int textX;
      for(int aktX = 0;aktX<100;aktX++){
        textX = (aktX+untereGrenze)%meinText.size();
        boolean[] aktSpalte = (boolean[]) meinText.get(textX);
         for(int u=0;u<aktSpalte.length;u++){
          if(aktSpalte[u]){
            g.setColor(Color.YELLOW);
            g.fillOval(links+(aktX*pG),oben+(u*pG),pG,pG);
          }
          else{
            g.setColor(Color.GRAY);
            g.fillOval(links+(aktX*pG),oben+(u*pG),pG,pG);
          }
        }
      }
    }
  }
Unter AMD Turion 64 x2 TK- 57 2x1.9 MHz komme ich bei Tempo 25 auch auf 30% CPU.

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 8:33 pm
von LotharImKeller
Was mir jetzt beim "nur" überfliegen auffällt ist, daß die Variablen-Namen nicht selbsterklärend sind. Kommentare, was da passiert stehen auch nicht dabei.

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 9:35 pm
von matej
Dann hier mal was ausführlicher:

Code: Alles auswählen

  private ArrayList meinText = new ArrayList();
  private Alphabet meinAlphabet = new Alphabet();
  private int oben = 105;                                                       // Abstand von oben
  private int links = 35;                                                       // Abstand von links
  private int pG = 4;                                                           // LED (Punkt) Größe
  private int pA = 100;                                                         // LED (Punkt) Anzahl in x-Richtung
  private int delay = 25;                                                       // Laufgeschwindigkeit
  private boolean laeuft = false;                                               // Läuft das Band
  private int untereGrenze = 0;                                                 // erstes anzuzeigendes Zeichen
  private ArrayList eintraege = new ArrayList();                                // Verzeichnis mit den Einträgen und deren unterer Grenze
  private Timer t;                                                              // Timer für das Laufen
  private boolean erstesMal;                                                    // schauen ob paint() schonmal durchlaufen


    @Override
    public void paint( Graphics g ){
    if(erstesMal){                                                              // Wird benötigt um die leere Anzeige zu zeichen, wenn es erstes Mal ist
      super.paint(g);                                                           // Zeichnet Schaltflächen etc.
      g.setColor(Color.DARK_GRAY);                                              // setzt die Stiftfarbe auf Dunkelgrau
      g.fillRect(links-pG/2,oben-pG/2,pG*(pA+1),(pG*1)+(pG*7));                 // Zeichnet den Hintegund der Anzeige
      for(int i=0;i<pA;i++){                                                    // Schleife für Splaten der Anzeige (links --> rechts)
        g.setColor(Color.GRAY);                                                 // setzt die Stiftfarbe auf Grau
        for(int u=0;u<7;u++){                                                   // Schleife für Zeilen der Anzeige (oben --> unten)
          g.fillOval(links+(i*pG),oben+(u*pG),pG,pG);                           // Zeichnet Punkt AUS
        }
      }
      erstesMal = false ;                                                       // erstesMal auf false, damit nicht nochmal durchlaufen wird
    }
    
    if(meinText.size()>1){                                                      // Wenn Text zum schreiben vorhanden

      int textX;                                                                // x-Position (Spalte) im gesamten Text

      for(int aktX = 0;aktX<pA;aktX++){                                         // Schleife für Splaten der Anzeige (links --> rechts)
        textX = (aktX+untereGrenze)%meinText.size();                            // Wenn Ende vom gesamten Text erreicht, wieder beim Ersten zeichen beginnen

        boolean[] aktSpalte = (boolean[]) meinText.get(textX);                  // Liest aktuell zu zeichnende Spalte in aktSplate ein

         for(int u=0;u<aktSpalte.length;u++){                                   // Zeichnet untereinander die LED's bis unterste Zeile von aktSpalte
          if(aktSpalte[u]){                                                     // Wenn die LED an ist
            g.setColor(Color.YELLOW);                                           // setz die Stiftfarbe auf Gelb
            g.fillOval(links+(aktX*pG),oben+(u*pG),pG,pG);                      // zeichnet LED
          }
          else{                                                                 // Wenn die LED aus ist
            g.setColor(Color.GRAY);                                             // setz die Stiftfarbe auf Grau
            g.fillOval(links+(aktX*pG),oben+(u*pG),pG,pG);                      // zeichnet LED
          }

        }

      }

    }

  }

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 9:53 pm
von js
Komplexe Animationen sollte man grundsätzlich immer mit Double-Buffering machen. Also das Malen in einen Puffer und nur diesen dann in der paint-Funktion darstellen. Alleine das dürfte schonmal etliche Ausgabeprobleme beheben.

Re: Fahrgastinformation - Plugin Vorschau

Verfasst: Fr Feb 25, 2011 10:27 pm
von VT628
Ich (=Null-Ahnung-Habenden von Java) erlaube mir mal jetzt ein kleines Feedback zu geben.

Ich finde die Idee nicht schlecht, macht Spaß ein wenig damit rumzuspielen :lol:

Was mir aufgefallen ist, dass die Anzeige keine Sonderzeichen wie . + etc. anzeigt. Evtl könnte man da entweder die Eingabe sperren oder es ermöglichen (vor allem der Punkt wäre meiner Meinung wichtig).
Außerdem ist zwischen zwei Nachrichten kein Abstand, die folgen direkt aufeinander ohne Leer. Evtl. Trennung mit +++ oder ähnliches würde sich anbieten, ich weiß es aber nicht, wie es in der Realität ist.

Sonst schauts super aus, und ich freu mich schon, wenn's komplett einsatzfähig ist! Mach(t) weiter so!