Programm erneut ausführen - geht nicht!

Status
Nicht offen für weitere Antworten.

magic_halli

Bekanntes Mitglied
Hi,

ich habe ein Programm, welches in ein techn. Zeichenprogramm (ProEngineer) über einen Button im Menü integriert ist. Mein Programm macht dort verschiedene Sachen (u.a. pdf´s erzeugen) mit einer geöffneten Baugruppe. Soweit geht auch alles wunderbar...
Wenn ich mein Programm zum ersten mal starte (über den Menübutton) läuft alles prima. Nur wenn ich direkt im Anschluß nach der ersten Ausführung nochmals mein Programm starten will, passiert gar nichts!!! Ich muss erst wieder das techn. Zeichenprogramm schließen und neu öffnen und dann gehts wieder für eine Ausführung bzw. ich lade eine völlig neue Baugruppe und lasse darauf mein Programm los - aber 2 mal hintereinander auf die gleich Baugruppe... das geht nicht!
Ich frage mich nur warum??? Ist sowas vielleicht ein Speicherproblem - das da noch irgendwelche Variablen mit Werten im Speicher gehalten werden???
Meine Einstiegsfunktion, die auf den Buttonklick die Abarbeitung startet, ruft eigentl. nur andere Funktionen auf, die dann etwas machen. Am Schluß setze ich meine ArrayListen, die benötigt wurden, alle wieder auf null - somit sind die doch schonmal leer?!
Code:
public class TestCommand extends DefaultUICommandActionListener {
    
    static String dateinamePDF = null;
    static String dateinameDXF = null;
    static ArrayList checkname = new ArrayList();
    static ArrayList matches = new ArrayList();
    static ArrayList matchesPS = new ArrayList();
    static ArrayList matchesPDF = new ArrayList();
	
	
	//=======================enthält alle Funktionalitäten hinter dem MenueButton====================
    public void OnCommand() {
        
       try {
           Session curSession = pfcGlobal.GetProESession();
           Model model = curSession.GetCurrentModel();
           //speichert drw-Namen vom akt.Arbeitsverzeichnis
           matches = listDir(curSession);
           
           //pdf-Name für großes pdf = Sachnummer von geöffneten Modell; an summaryPDF() übergeben
           String pdfname_gesamt = setFilename_PDF_gesamt(model);

           //alle *.ps, *.pdf, *.dxf und dxf_filenames.txt aus akt. Arbeitsverzeichnis löschen
           deletePS(curSession);
           deletePDF(curSession);
           delete_DXF(curSession);
           delete_dxf_filenames(curSession);

           
           //Realisiert komplette Abarbeitung - anhand geöffneter Baugruppe oder Bauteil
           if(getModelType(curSession, model) == "PART"){
        	   //pdf´s und ggf. dxf für prt erzeugen
        	   part(curSession, model);
           }
           else if(getModelType(curSession, model) == "ASSEMBLY"){
        	   //pdf´s für geöffnete Baugruppe erzeugen
        	   asm(curSession, model);
        	   //Assemblystruktur abarbeiten
        	   searchTree(curSession, model);
           }
           
           //pdf-Erstellung aller ps-Dateien im akt. Arbeitsverzeichnis
           //nach Abarbeitung der Baugruppe bzw. Bauteil
           convertPS(curSession);

           //erzeugt Gesamt-pdf aus allen einzelnen pdf´s
           summaryPDF(curSession, pdfname_gesamt);
           //löscht alle entstandenen ps-files nach Beendigung
           deletePS(curSession);
           //löscht alle pdf´s nach Beendigung, ausser das "Gesamt-pdf"
           deletePDF_small(curSession, pdfname_gesamt);
           
           //ArrayListen nullen
           checkname = null;
           matches = null;
           matchesPS = null;
           matchesPDF = null;
           
       }catch(jxthrowable err) {
            System.out.println(err);
       }
    }
...

}
An was könnte das liegen, wenn ich nicht mehrmals hintereinander mein Programm auf die gleiche Baugruppe ausführen kann???
(Ich möchte keine Codefragmente etc. - mein Code soll nur als Veranschaulichung meiner Startfunktion dienen)
Ich wäre über allgemeine Tips dankbar, denen ich dann nachgehen kann.

Danke.
 
Ist das andere programm auch ein Java Programm??

Weil dann bleiben all deine

static String dateinamePDF = null;
static String dateinameDXF = null;
static ArrayList checkname = new ArrayList();
static ArrayList matches = new ArrayList();
static ArrayList matchesPS = new ArrayList();
static ArrayList matchesPDF = new ArrayList();


Static Dinger schon erstellt 😉

Deswegen heißen die ja auch static!
 
Sind die "Static Dinger" aber bei einer neuen Abarbeitung bzw. Aufruf noch immer gefüllt (vom vorhergehenden Aufruf)? Ich dachte, die werden bei erneutem Abarbeiten wieder neu angelegt bzw. Speicher hierfür reserviert!?
 
nope static bleibt befüllt.

Ich versuche immer Ohne Statics auszukommen wenn man mehrer Instanzen öfnnen können soll
 
Aber wenn ich, wie oben in meinem Quellcode, ganz am Ende die ganzen Static <ArrayListen>=null setze, sollten diese doch eigentlich auch wieder leer sein (bei erneutem Aufruf), oder?
 
Solange es die gleiche JVM ist, NEIN!

Dazu ist ja static da!

Warum verwendest du static, wenn du nicht weißt wozu es überhaupt da ist...
 
So, ich hab jetzt alles statische rausgenommen und umgeschrieben... jetzt geht die Sache.

Anfänglich dachte ich, dass ich nicht ohne statische ArrayListen hinkomme - deshalb hab ich die genommen! Doch es geht auch ohne :roll:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben