Seite 1 von 1

LO-Crash beim Schließen einer Datei

Verfasst: Do 10. Dez 2015, 16:36
von toni007
Hallo zusammen,

ich habe eine Anwendung(Extension) entwickelt, die Versicherungsangebote erstellt.
In der Extension gibt es u.a. zwei files:
FPP_ZD.ods und
FPP_BE.ods

FPP_ZD.ods (oDocFPP) ist die eigentliche Anwendung, in der über Dialoge Benutzereingaben erfolgen und Angebote erstellt werden.
In FPP_BE.ods (oDocFPP_BE) werden diese Benutzereingaben gespeichert.

Die Anwendung läuft nun seit einigen Jahren problemlos (zuletzt unter Ubuntu 12.04 und LO 4.1.5.3).
Wir haben jetzt auf Ubuntu 14.04 und LO 4.3.5.2 gewechselt.

Nun ergibt sich folgendes Problem:

Wenn ich in der Anwendung auf den Speicher-Button drücke, und den darauf folgenden Speichern-Dialog bestätige stürzt LO ab (in mehr als 50% der Fälle)

Grob passiert in der folgenden Prozedur dies:

Die Benutzerdatendatei (FPP_BE.ods) wird 'hidden' geöffnet, die Daten aus der Anwendung werden in FPP_BE.ods übertragen, die Datei wird gespeichert und dann geschlossen.
Beim .Close(True) crasht LO regelmäßig!!!

Die Prozedur aus der Extension:

Code: Alles auswählen

'*********************************************************************************************************
'*   Beim Speichern der Anwendung werden die Daten in die BE_Datei übernommen.                           *
'*   Die Prozedur wird über den Speichern-Button auf der Startseite der Anwendung aufgerufen.            *
'*********************************************************************************************************
Sub SpeichernUnter_FPP(oDocFPP As Object)
	Dim speicherDialog as Object
	Dim dateiname As String
	Dim DialogTyp(0)
	Dim arg()
	Dim antwort
	Dim datei
	Dim args1(0) as new com.sun.star.beans.PropertyValue
	Dim oDocFPP_BE As Object
	Dim i As Integer
	
	
    nurSpeichern_KZ_FPP = True

	args1(0).Name = "FilterName"
	args1(0).Value = "calc8"

	arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE)
	speicherDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
	With speicherDialog
		.Initialize(arg())
		.appendFilter("OpenDocument Tabellendokument (.ods)", "*.ods")
		.SetMultiselectionMode(False)
		.setDisplayDirectory(ConvertToURL(Environ("HOME")) & "/Kraftfahrt-OO") ' neu UBUNTU
		.SetTitle("Speichern Unter")
		.setcurrentFilter("OpenDocument Tabellendokument (.ods)")
		.SetValue(com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_AUTOEXTENSION, 0, true)
		.SetDefaultName(glDateiname_FPP)
	End With
	
	antwort = speicherDialog.execute()
	If antwort = 1 Then
		datei = speicherDialog.Files(0) 'steht darin der nur der Name
		glDateiname_FPP = Mid(FilenameoutofPath(ConvertFromUrl(datei),sSeparator), 1, Len(FilenameoutofPath(ConvertFromUrl(datei),sSeparator)) - 4)
	    oDocFPP_BE = OpenFileInPathHidden("Template", "FPP_BE.ods")
' Datentransfer
		Call Anwendungsdaten_nach_BE_FPP(oDocFPP, oDocFPP_BE) 
		With oDocFPP_BE
			.LockControllers   	
			.unProtect("xxx")
			For i = 0 To .Sheets.getCount() - 1
				If .Sheets.getByIndex(i).Name <> "Dummy" Then
					.Sheets.getByIndex(i).IsVisible = False
				End If
			Next
			.Protect("xxx")
			.UnlockControllers
			.storeToUrl(datei, args1()) ' Speichern
			.Close(True) ' hier crasht LO!!!!!!
		End With
	End If
    nurSpeichern_KZ_FPP = False
 
	oDocFPP.Title = glDateiname_FPP
	oDocFPP.Modified = False
End Sub

Hat da jemand ne Idee???

LO meldet keinen Fehler, sondern stürzt direkt ab. Aber die JRE hat ein errorlog erzeugt. Die Datei kann ich aber nicht anhängen.
Hier der Anfang ...
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fbac54a3ec4, pid=10376, tid=140440868099968
#
# JRE version: Java(TM) SE Runtime Environment (8.0_60-b27) (build 1.8.0_60-b27)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.60-b23 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libsvxcorelo.so+0x418ec4] SdrObjList::GetObj(unsigned long) const+0x14
...

Gruß Thomas

Re: LO-Crash beim Schließen einer Datei

Verfasst: Do 10. Dez 2015, 16:51
von gogo
Warte das Speichern vollkommen ab!

oDocFPP_BE.ismodified oder oDocFPP_BE.modified muss FALSE sein.

Code: Alles auswählen

do while oDocFPP_BE.modified
   x=x+1
   wait 200
   if x>50 then
      msgbox "5 Sekunden gewartet, die Datei ist noch immer nicht gespeichert!"
      exit do ' besser: end
   end if
loop
Das Objekt oDocFPP_BE kann man leider nicht aus dem geposteten Code ersehen - musst Du mit xray oder mri rausfinden.
Wenn eine veränderte gerade zu speichernde Datei geschlossen wird hat man in der Regel ein Problem.