I have experienced something like that. I am building a java macro for the OOo Calc that uses some swing windows. During the development phase, whenever the macro crashed the OOo, the window remained open, and the thread for the soffice.bin would remain loaded. i added some terminate procedures for the orphan windows.
Also, if someone is using java-created windows on OOo macros, you might want to change the defaultCloseOperation on close button to DO_NOTHING as EXIT_ON_CLOSE causes the instant termination of the soffice.bin process, including all OOo windows and the quick launcher. 2007/1/26, news.gmane.org <[EMAIL PROTECTED]>:
Jörg Budischewski ha scritto: >> My platform is windows XP with java 1.5.0_06 and eclipse as a IDE. >> The application is closed calling Runtime.getRuntime().halt(0); > have a look at these tools, tcpview.exe show what processes are > listening on which ports. > > http://www.microsoft.com/technet/sysinternals/utilities/sysinternalssuite.mspx > > > Please try to use System.exit() and see, if it changes the behaviour. > > If your process is still alive, you'll need to attach with a native > debugger to it, but you may only see something, when you have debug > enabled libraries. Hi, I've already tried tcpview, and it shows a <non-existent> process keeping the socket. A profiler is giving me some more details: I've found some object which remain instantiated and there are some thread owned by OOoBean$EventListener.run() and java_remote_bridge$MessageDispatcher.run(). I think I have to kill these two threads, but I don't know how to do. My bean is embedded into another class which extends Composite; the class is named CExpOpenoffice. CexpOpenoffice contains a : Frame m_oContainer = SWT_AWT.new_Frame(this); and then my bean instance : m_oBean = new OOoBean(); then I add the bean to the frame: m_oContainer.add(m_oBean); In CExpOpenoffice I also create a context and a Listener for global events: XComponentContext xRemoteContext = m_oBean.getOOoConnection().getComponentContext(); Object xGlobalBroadCaster = xRemoteContext.getServiceManager().createInstanceWithContext( "com.sun.star.frame.GlobalEventBroadcaster", xRemoteContext); xEventBroad = (XEventBroadcaster)UnoRuntime.queryInterface(XEventBroadcaster.class, xGlobalBroadCaster); xEventBroad.addEventListener(new com.sun.star.document.XEventListener() { public void notifyEvent(com.sun.star.document.EventObject oEvent) { //O.log("Listener has received an event: " + oEvent.EventName); XModel oModel = (XModel)UnoRuntime.queryInterface(XModel.class,oEvent.Source); String sUrl = ""; if (oModel!=null) { //O.log("Model URL: " + oModel.getURL()); sUrl = oModel.getURL(); } else { //O.log("Source model is null"); } //inserisco l'evento nella coda if (!m_messageQueue.offer(new QueuedMessage(sUrl,oEvent.EventName))) { //O.log("Impossibile inserire nella coda il messaggio da Openoffice: " + oEvent.EventName); } } public void disposing(com.sun.star.lang.EventObject e) { //O.log("On Dispose"); } }); CExpOpenoffice implements DisposeListener, so that I can dispose the bean and all related objects when the container is disposed: public void widgetDisposed(DisposeEvent arg0) { //O.log("CExpOpenOffice.widgetDispose: richiamo la closeDocument"); xEventBroad.removeEventListener(oOfficeListener); try { xContext = null; m_oBean.clear(); } catch(Throwable oEx){ //O.log("CExpOpenOffice.widgetDispose: Eccezione: probabilmente il documento era già chiuso"); oEx.printStackTrace(); } try { O.log("Widgetdisposed di CExpOpenOffice: termino desktop"); XDesktop oDesktop = m_oBean.getOOoDesktop(); if (oDesktop!=null) { //O.log("Termino il desktop"); oDesktop.terminate(); //O.log("Widgetdisposed di CExpOpenOffice: terminato desktop"); } } catch(Throwable oEx){ //O.log("CExpOpenOffice.widgetDispose: Eccezione nella desktop.terminate"); oEx.printStackTrace(); } try { //O.log("Widgetdisposed di CExpOpenOffice: termino la connessione"); m_oBean.stopOOoConnection(); //O.log("Widgetdisposed di CExpOpenOffice: terminato la connessione"); } catch(Throwable oEx){ //O.log("CExpOpenOffice.widgetDispose: Eccezione nella stopOOoConnection"); oEx.printStackTrace(); } try { //O.log("Widgetdisposed di CExpOpenOffice: distruggo container"); m_oContainer.dispose(); //O.log("Widgetdisposed di CExpOpenOffice: distrutto container"); } catch(Throwable oEx){ //O.log("CExpOpenOffice.widgetDispose: Eccezione nella m_oContainer.dispose"); oEx.printStackTrace(); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
