Connection schließen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Connection schließen

yepp

von AlemannenLady » Di, 30.01.2007 09:07

Danke, das war der Fehler! :)

Re: okay... :)

von hol.sten » Mo, 29.01.2007 19:18

AlemannenLady hat geschrieben:Ich hab daraufhin schon den Code geändert und die fehlenden Packages auch importiert. Aber er wollte das trotzdem nicht anerkennen und ihm waren z.B. PropertyValue unbekannt.
Dann hat das Jar-File "ridl.jar" in deinem CLASSPATH gefehlt. Öffne einfach mal "ridl.jar" mit einem ZIP-Programm. Dann wirst du dort im Unterverzeichnis com/sun/star/beans das Class-File "PropertyValue.class" finden. Die JAR-Files von OOo findest du in deinem OOo Installations-Verzeichnis im Unterverzeichnis "program/classes". Unter Windows bei einer Standard-Installation von OOo 2.1 also z. B. im Verzeichnis "C:\Program Files\OpenOffice.org 2.1\program\classes".

Regards
hol.sten

okay... :)

von AlemannenLady » Mo, 29.01.2007 17:51

...das macht natürlich Sinn! :oops: ich habe zuvor noch nie mit OpenOffice gearbeitet, daher habe ich sofort nach UNO packages gesucht. Da hatte ich nur die Auswahl zwischen dem Noa und dem Uno Wrapper (kostenpflichtig) von Riess. Hat zwar auch wunderbar geklappt, aber wenn ich mal was ändern wollte und funktionierte nicht, habe ich immer nur die Beispiele mit dem X davor gefunden.
Ich hab daraufhin schon den Code geändert und die fehlenden Packages auch importiert. Aber er wollte das trotzdem nicht anerkennen und ihm waren z.B. PropertyValue unbekannt.

Re: Package

von hol.sten » Fr, 26.01.2007 19:16

AlemannenLady hat geschrieben:welches Package benutzt ihr?
Die JAR Dateien aus dem OOo Installationsverzeichnis.
AlemannenLady hat geschrieben:Ich hatte bisher nur Probleme mit den XComponent und PropertyValues.
Aha, und welche?
AlemannenLady hat geschrieben:Wenn man das NOA Package nimmt
Kenne ich auch nicht.

Regards
hol.sten

Re: Package

von mipa » Fr, 26.01.2007 10:41

Das NAO Package kenne ich nun gar nicht
Alles, was ich benutze steht im oben abgebildeten Code.

Package

von AlemannenLady » Fr, 26.01.2007 10:30

welches Package benutzt ihr? Ich hatte bisher nur Probleme mit den XComponent und PropertyValues. Bin jedoch auch nicht sehr bewandert auf diesem Gebiet.
Wenn man das NOA Package nimmt geht es auch so:
officeApp.getDesktopService().terminate();

Ciao

von mipa » Fr, 26.01.2007 08:36

Und es klappt!
Danke :lol:

von hol.sten » Mi, 24.01.2007 19:25

Toxitom hat geschrieben:Wenn ich das richtig entziffere, dann schliessst du zwar das Dokument, das jedoch ist ja nur Teil des Frameworks - des StarDesktops. Ich denke, wenn du alles weg haben willst, musst du den entfernen. Wahrscheinlich mit "dispose"
Ich mache es so:

Code: Alles auswählen

Object desktop = remoteContext.getServiceManager().createInstanceWithContext("com.sun.star.frame.Desktop",xRemoteContext);
XDesktop xDesktop = (XDesktop) OpenOfficeFacade.queryUNOInterface(XDesktop.class, desktop);
xDesktop.terminate();
Regards
hol.sten

von Toxitom » Mi, 24.01.2007 17:16

Hey Michaela,

Das Verhalten ist an sich "normal". Die beiden Prozesse bleiben in der Regel im Hintergrund bestehen, solange noch irgendeine Instanz von OOo läuft, und das ist meist der Schnellstarter.
Wenn ich das richtig entziffere, dann schliessst du zwar das Dokument, das jedoch ist ja nur Teil des Frameworks - des StarDesktops. Ich denke, wenn du alles weg haben willst, musst du den entfernen. Wahrscheinlich mit "dispose", aber da must du noch mal nachschlagen :-)

Gruss
Thomas

Connection schließen

von mipa » Mi, 24.01.2007 16:18

Hallo,

ich habe ein Problem beim Schließen der Connection zu OpenOffice. Ich möchte ein Writer-Dokument öffnen, evtl. bearbeiten und dann alles schließen. In der Oberfläche klappt es auch soweit, aber im Task-Manager bleiben die Prozesse soffice.exe und soffice.bin weiterhin bestehen. Erst wenn ich den Writer einmal manuell schließe, verschwinden die Prozesse.

Es würde ja auch nicht weiter stören, wenn der Prozess soffice.bin nicht immer weiter Speicher saugen würde, wenn ich ein neues Dokument öffne.

Ich schließe die Verbindung wohl nicht richtig. Kann mir jemand helfen?

Code: Alles auswählen

	private XComponentLoader componentLoader = null;
	private XComponentContext remoteContext = null;
	private XMultiComponentFactory remoteServiceManager = null;

	public void testConnection() throws java.lang.Exception {

		// Connection herstellen
		XComponentLoader connection = openConnection();

		// Dokument öffnen
		PropertyValue loadProps[] = new PropertyValue[1];
		loadProps[0] = new com.sun.star.beans.PropertyValue();
		XComponent component = connection.loadComponentFromURL(
				"file:///D:/temp/Test.ott", "_blank", 0, loadProps);

		// Dokument schliessen
		closeDocument(component);

		// Connection schließen
		connection = null;
	}

	private XComponentLoader openConnection() throws java.lang.Exception {

		if (this.remoteContext == null && this.remoteServiceManager == null) {
			// get the remote office context. If necessary a new office
			// process is started
			try {
				this.remoteContext = com.sun.star.comp.helper.Bootstrap
						.bootstrap();
				System.out.println("Connected to a running office ...");
				this.remoteServiceManager = this.remoteContext
						.getServiceManager();

			} catch (java.lang.Exception ex) {
				log.error("Fehler beim Connect to OpenOffice!", ex);
			}
		}

		// retrieve the Desktop object, we need its XComponentLoader
		Object desktop = this.remoteServiceManager.createInstanceWithContext(
				"com.sun.star.frame.Desktop", this.remoteContext);

		this.componentLoader = (XComponentLoader) UnoRuntime.queryInterface(
				XComponentLoader.class, desktop);

		return this.componentLoader;
	}

	private void closeDocument(XComponent component) throws java.lang.Exception {
		XModel model = (XModel) UnoRuntime.queryInterface(XModel.class,
				component);

		if (model != null) {
			XCloseable xClosable = (XCloseable) UnoRuntime.queryInterface(
					XCloseable.class, model);
			int k = 0;
			if (xClosable != null) {
				while (k < 100 && xClosable != null) {
					try {
						xClosable.close(true);
						xClosable = null;
					} catch (com.sun.star.util.CloseVetoException exCloseVeto) {
						System.out.println(exCloseVeto.toString());
						Thread.sleep(1000);
						k++;
					}
				}
			} else {
				XComponent disposable = (XComponent) UnoRuntime.queryInterface(
						XComponent.class, model);
				disposable.dispose();
			}
		}
	}
Danke und Gruß, Michaela

Nach oben