[gelöst] Absturz LO, Schliessen eines versteckt geladenen...

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

[gelöst] Absturz LO, Schliessen eines versteckt geladenen...

Beitrag von F3K Total »

Hallo zusammen,
ich habe mir vor kurzem Libre Office 3.5.6.2 parallel zu OOo 3.3.0/AOo 3.4 installiert.
Nun habe ich ein seltsames Phänomen:
Wenn ich mit OOo eine Calc Datei versteckt (hidden) lade, bearbeite, als .pdf exportiere und dann das Dokument mit .close(true) wieder schliesse, läuft alles problemlos.
Nehme ich dasselbe Dokument in Libre Office, stürzt LO genau beim Befehl .close(true) komplett ab.
Ich verwende Windows 7 32-Bit.
Kann das jemand nachvollziehen, oder hat jemand eine Idee wie der Absturz verhindert werden kann?

Anbei mein Beispieldokument, das unter OOo 3.3.0 und auch AOo 3.4 problemlos funktioniert.

Beste Grüße von Rik
Dateianhänge
Test_load_hidden_template_and_close.odt
(11.22 KiB) 78-mal heruntergeladen
Zuletzt geändert von F3K Total am Mo, 17.09.2012 17:25, insgesamt 2-mal geändert.
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Absturzt LO, Schliessen eines versteckt geladenen Calc-D

Beitrag von balu »

Hallo Rik,
Kann das jemand nachvollziehen
Ja kann ich. Unter WinXP-Pro mit (selbsterstellte)Portable LO 3.5.5.3. Mit OOo 3.3.0 gibts keine Probleme.
Bei "sichtbar öffnen und schließen" gibt es keine Probleme. Jedoch bei "unsichtbar öffnen und schließen" ist Schluss mit Lustig, also Absturz.

hat jemand eine Idee wie der Absturz verhindert werden kann?
Nein :(.
Folgende Änderungen hatte ich vorgenommen, und trotzdem Absturz.

1.

Code: Alles auswählen

dim bhidden as boolean
Hatte ich Öffentlich gemacht. Also ganz am Anfang des Moduls oberhalb von Sub Load_Template (event)


2.
Eine kleine aber wohl wichtige Änderung.
Bei

Code: Alles auswählen

F_load_template = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, aProps1())
das Klammerpaar() gesetzt. In sub Export_pdf (oframe) hattest Du das Klammerpaar aber gesetzt.


3.
Eine kleine Überprüfung ob auch der auslösende Button den richtigen Wert ausgibt.

Code: Alles auswählen

Sub Load_Template(event)
bhidden = event.source.model.tag
print bhidden
Ergebniss: Ja, es funktioniert.


4.
Mit Functions kenne ich mich noch nicht so richtig aus, aber müsste das nicht richtigrum so heißen?

Code: Alles auswählen

function F_load_template (sFilename as String, bHidden as boolean) as Object
sFilename hatte ich um 'as String' ergänzt.
Und gleich noch zwei Fragen dazu.
sFilename finde ich nur dort an besagter Stelle, und sonst nirgendwo anders. Ist das richtig so? Was bezweckst Du damit?

Eine Änderung auf

Code: Alles auswählen

function F_load_template (sFilename as String, bHidden as boolean)
brachte auch keine Besserung.


Kurz und gut: Ich kann dir da auch nicht weiterhelfen. Aber das soll gar nichts bedeuten, da ich ja auch nicht der Kenner bin.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Absturz LO, Schliessen eines versteckt geladenen Calc-Do

Beitrag von F3K Total »

Hallo Balu,
vielen Dank für die Mühe die du Dir gemacht hast. Das es Dir genauso geht wie mir, beruhigt mich ein wenig, da scheint also LO einen Bug zu haben.
Es wäre interessant zu erfahren, ob der Fehler nur unter Windows oder auch unter anderen Betriebssystemen auftritt.
balu hat geschrieben:sFilename finde ich nur dort an besagter Stelle, und sonst nirgendwo anders. Ist das richtig so? Was bezweckst Du damit?
Nun, das ist ein Relikt, das ich bei der Vereinfachung der function "F_load_template" übersah.
Die urspüngliche function rief kein leeres Dokument ("private:factory/scalc") sondern eine Vorlage mit dem Namen sFilename auf.

Beste Grüsse von Rik
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Absturz LO, Schliessen eines versteckt geladenen Calc-Do

Beitrag von F3K Total »

Hallo zusammen,
ich möchte Euch informieren, dass ich das Problem dank dieses Hinweises von DPunch in einer PM lösen konnte.
DPunch hat geschrieben:Kannst Du den Export auch ohne Dispatcher machen? Das wäre vielleicht auch noch ein Ansatz, da der Dispatcher sich direkt auf den Frame bezieht, den Du versteckst. So direkte Abstürze hängen fast immer damit zusammen, dass ein Objekt bereits disposed wurde, dass noch für irgendwas benötigt wird. Der Export, der noch irgendwo festhängt, aber in direkter Verbindung zum Frame steht, der mit dem Schliessen des Dokuments disposed wird z.B.. Möglicherweise benachrichtigt ein Hidden geöffnetes Dokument (respektive der Controller) nicht alle Listener korrekt, wenn es geschlossen wird.
Der Grund für den Absturz war tatsächlich die Dispatcher-Methode mit der ich die versteckt geladene Datei als .pdf speichern wollte.
Anscheinend kann LO damit nichts anfangen.
Ich habe also diesen Code:

Code: Alles auswählen

sub Export_pdf (oframe)
    URL = replace (thiscomponent.location,".odt",".pdf")
    url_pdf_out = converttourl(URL)
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dim args1(1) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "URL"
    args1(0).Value = url_pdf_out
    args1(1).Name = "FilterName"
    args1(1).Value = "writer_pdf_Export"
    dispatcher.executeDispatch(oframe, ".uno:ExportDirectToPDF", "", 0, args1())
end sub
so ersetzt:

Code: Alles auswählen

sub Export_pdf (document)
    URL = replace (thiscomponent.location,".odt",".pdf")
    url_pdf_out = converttourl(URL)
    Dim myProps(0) as New com.sun.star.beans.PropertyValue
    myProps(0).Name="FilterName"
    myProps(0).Value = "calc_pdf_Export"
    document.storetoUrl(url_pdf_out,myProps()) 'Speichern
end sub
Hier wird anstelle des Frames die aktuelle Komponente übergeben und gespeichert, jetzt funktioniert es einwandfrei.

Beste Grüße von Rik
Antworten