tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Fabio Hellmann
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
347
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    strahlenglanz strahlenglanz ist offline Grünschnabel
    Registriert seit
    Aug 2011
    Ort
    Cottbus
    Beiträge
    2
    Hei zusammen,

    also ich schreib gerade ein Programm zu Steuerung von Objekten. Ziel is es anhand eines Bildes auszumachen wo jemand sitzt und anhand dessen die jeweiligen Objekte anzusteuern.

    Ich starte zuerst einen Restarter, damit ich sowohl den Heap von Java als auch von der genutzen Lib ImageJ zu erhöhen. Aus diesem heraus wird dann die .jar gestartet. Soweit alles ohne Probleme.

    Mein Problem liegt jetzt darin: alle 2 sec soll ein Bild von der Kamera gelesen und mit dem Referenzbild verglichen werden - soweit auch kein Problem. Allerdings komme ich mir mit ImageJ ins Gehege - trotz mehrfachen aufrufen des GarbageCollectors und sparsamen Umgang mit ImageJ- Sachen wie ImagePlus, kommt nach ca 80min der Knall - Heapspace übervoll. Man kann auch richtig zusehen wie die Anwendung Speicher frisst.
    Leider bin ich auch im ImageJ-Forum zu keiner Lösung gekommen wie man diesen Speicherverbrauch reduzieren kann.
    Daher is meine Lösung jetzt (ich hab nur noch 5 Tage und will's wenigstens zum dauerhaften Laufen bringe) ich starte das Programm nach 1000 Durchläufen (in 80min sind ca.1400 möglich) neu mit der aktuellen Konfiguration.

    Die Umsetzung ist weiter auch nicht schwierig. Allerdings versuche ich meine aktuelle Konfiguration als .xml zu speichern.
    Wenn ich dann allerdings aus meinem Thread heraus (der zum alle 2sec einlesen der Bilder) system.exit(0) aufrufe, wird die .xml gelöscht. Ich erstelle die xml vor dem starten des Threads.

    seh ich den Wald vor lauter Bäumen grad nicht? Meine Vermutung ist, dass es was mit den Threads zu tun hat.

    restarter -> java heap + imagej hochsetzen, starten der eigentlich app.jar
    app.jar -> eigentliche Programmausführung, das zeitabhängige Bildereinlesen erfolgt in eigenem Thread


    Danke schonmal für eventuelle Tipps!!
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi strahlenglanz und Herzlich Willkommen bei Tutorials,
    wenn ich dein Problem ich richtig erkannt habe und deinen Lösungvorschlag in betracht ziehe, würde ich auf folgende Lösung kommen.
    Du machst dir ein Java-Programm, von welchem du deine App startest. In diesem "Handler"-Programm sag ich jetzt mal, kannst du auch deine XML-Datei lagern. Oder diese Daten direkt in einem Objekt halten (wäre fast sinnvoller). Wenn du die App dann über den Handler startest, kannst du die XML-Datei/Objekt mit übergeben, dass die App auf die Daten ebenfalls zugriff hat.

    Allerdings ist das aus meiner Sicht keine all zu tolle Lösung.
    Ich würde die Programme nicht splitten, sondern als ein Programm zusammenfassen und die Programme als Objekte dann sehen. Sprich App-Programm als Objekt und Handler-Programm als Objekt. Also ungefähr so:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    import java.io.File;
     
    public class PictureModifier
    {
        private final File xmlFile;
        private App app;
        
        public PictureModifier(File xmlFile) {
            this.xmlFile = xmlFile;
        }
     
        private void run() {
            app = new App(xmlFile);
            String returnValue = app.run();
            // Den returnValue könntest du dann auswerten
            // ...
            // Das Objekt "App" auf null setzen. Dann wird es vom GC entfernt.
            app = null;
            // System.gc(); <-- kannst du aufrufen, sollte aber Java normalerweiße automatisch machen
        }
        
        public static void main(String[] args) {
            File xmlFile = new File(args[0]); // oder einlesen, je nachdem wie du es machst
            new PictureModifier(xmlFile).run();
        }
    }

    Gruß

    Fabio
    Geändert von Fabio Hellmann (25.08.11 um 10:56 Uhr)
    strahlenglanz bedankt sich. 
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  3. #3
    strahlenglanz strahlenglanz ist offline Grünschnabel
    Registriert seit
    Aug 2011
    Ort
    Cottbus
    Beiträge
    2
    gute Idee Danke - jetzt gehts
     

Ähnliche Themen

  1. Aus C++ Anwendung Java-RCP-Anwendung aufrufen
    Von Jonny1303 im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 08.02.10, 20:13
  2. aus C++ Anwendung Java-RCP-Anwendung aufrufen
    Von Jonny1303 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 05.02.10, 16:06
  3. Win32API Anwendung auf MFC-Anwendung portieren
    Von Cappaja im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 10.05.09, 16:42
  4. Neustart-Funktion einer Anwendung (?)
    Von thekona im Forum VisualStudio & MFC
    Antworten: 4
    Letzter Beitrag: 03.05.05, 18:29
  5. Neustart?
    Von aNero im Forum Microsoft Windows
    Antworten: 6
    Letzter Beitrag: 04.04.04, 11:46

Stichworte