# Java-OfficeBean-UNORuntime?



## JSteinhilber (18. Feb 2008)

Hallo Java-Gemeinde,
vielleicht lacht sich jetzt jeder hier im Forum gleich scheckig - aber ich habe zu diesem Thema Null Komma Null Peilung.

Also, ich habe mir OpenOffice und das OpenOffice-SDK heruntergeladen.

Die Darstellung eines "Writer-Objektes" in einer Swing-Application ist ja denkbar einfach.
Jetzt müßte ich aber das Teil fernsteuern. Das bedeutet  z.B. Tabellen erstellen, Textinhalte einfügen, Suche-Ersetze-Operationen durchführen etc..

Soweit ich das verstanden habe geht das nur über die UNORuntime. 
Wie um Gottes Willen läßt sich also dieses OfficeBean mit dieser UNORuntime-Geschichte koppeln?

Hat zufällig jemand ein Beispielprogramm im Fundus - oder ein paar Code-Schnipsel parat?

Wäre schön und bereits jetzt herzlichen Dank für die Hilfe.

Grüße an alle
Jürgen


----------



## Wildcard (18. Feb 2008)

Ich empfehle dir NOA, das macht die Sache wesentlich leichter.
http://ubion.ion.ag/loesungen/004niceofficeaccess

EDIT:
übrigens, wenn du OOo nur fernsteuern willst, musst du es gar nicht über die OfficeBean anzeigen, das geht auch 'headless'


----------



## JSteinhilber (18. Feb 2008)

Vielen Dank Wildcard,
aber der Download ersetzt bei mir ein Fragezeichen durch ein anderes?

Gruß
Jürgen


----------



## Wildcard (18. Feb 2008)

Da sind sehr viele Snippets enthalten. Die Sache ist im Prinzip ganz einfach.
Wenn du eine konkrete Frage dazu hast, kann ich dir auch konkretere Tipps geben  :wink:


----------



## JSteinhilber (19. Feb 2008)

Hallo Wildcard,
herzlichen Dank für Deinen Tip.
Das Fragezeichen löst sich langsam aber sicher in Wohlgefallen auf.
Hast Du zufällig ein Beispiel für "suchen & ersetzen" mittels Nice-Office-Access?

Güße
Jürgen


----------



## Wildcard (19. Feb 2008)

```
ISearchDescriptor descriptor = new SearchDescriptor("something"); 
        //configure the descriptor here 
        ISearchResult result = doc.getSearchService().findAll(descriptor);
        ITextRange[] ranges = result.getTextRanges();
        ranges[0].setText("something else");
```
(doc ist ein ITextDocument)


----------



## JSteinhilber (19. Feb 2008)

Erneut herzlichen Dank.

Wenn ich Dir mit meiner "Fragerei" nicht all zu sehr auf den Senkel gehe, würde ich Dein Wissen demnächst noch einmal in Anspruch nehmen. 
Es sei denn es gäbe ein vernünftiges Buch zu diesem Thema das meine "Very-Beginner-Fragen" überflüssig machen würde.

Grüße
Jürgen


----------



## Wildcard (19. Feb 2008)

JSteinhilber hat gesagt.:
			
		

> Es sei denn es gäbe ein vernünftiges Buch zu diesem Thema das meine "Very-Beginner-Fragen" überflüssig machen würde.


Es gibt einen UNO Developers Guide und auch Bücher dazu, aber für mich ist UNO immer nur das letzte Mittel wenn etwas in der NOA API noch nicht implementiert ist, da es wirklich verflucht komplex ist.


----------



## JSteinhilber (19. Feb 2008)

Und da wäre sie bereits - meine nächste Frage

ich habe OpenOffice über NOA in einem JPanel gestartet.

Wird ein Button gedrück soll OpenOffice geschlossen werden.


```
private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setText("OpenOffice schliessen");
			jButton1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
					try {
						officeAplication.getDocumentService().dispose();
						officeAplication.deactivate();
						officeAplication=null;
						document=null;
						textDocument=null;
						officeFrame=null;
						jPanel2.setVisible(false);
						jContentPane.validate();
					} catch (OfficeApplicationException e1) {
						e1.printStackTrace();
					}
				}
			});
		}
		return jButton1;
	}
```
Ein weiter Button soll bei Bedarf erneut eine Verbindung zu OpenOffice aufbauen und in demselben Jpanel darstellen.

Was passiert ? Es laufen 2 Instanzen von OpenOffice, schön zu sehen wenn das Fenster zwischenzeitlich in der Größe verändert wurde.
Das heißt das OO-Object wurde nicht gelöscht. Auf der Suche nach einer Methode wie .destroy() oder ähnliches blieb ich bislang erfolglos.
Können Sie sich dieses Verhalten erklären? Und gibt es für dieses Problem eine Lösung?

Grüße
Jürgen


----------



## Wildcard (19. Feb 2008)

Du willst die OOo Instanz beenden?

```
getDesktopService().terminate();
```

Übrigens, eine Instanz kann mehrere Dokumente und Frames bedienen. Es bietet sich vermutlich an OOo erst beim Beenden deiner Applikation zu beenden (wenn überhaupt).


----------



## JSteinhilber (19. Feb 2008)

Mit 
	
	
	
	





```
getDesktopService().terminate();
```
 erhalte ich Fehlermeldungen daß man ganze Bücher damit füllen könnte.

Na ja eigentlich wär mir schon gedient, wenn ich alle offenen Dokumente schließen könnte und dann das JPanel mit setVisibel(false) verschwinden lassen und eben bei Bedarf OOo bzw das JPanel erneut in den Vordergrund holen.

Aber - das Leben ist hart und für die Ahnungslosen sowieso.

Gruß und nochmals herzlichen Dank für deine wertvolle Hilfe.
Jürgen


----------



## Wildcard (19. Feb 2008)

> erhalte ich Fehlermeldungen daß man ganze Bücher damit füllen könnte.


Vorher darfst du nicht disposen! Ansonsten würden die Fehlermeldungen helfen  :wink: 

```
officeApplication.getDocumentService().getCurrentDocuments()[0].close()
```


----------



## JSteinhilber (19. Feb 2008)

Sagen Sie mal, Sie sind aber nicht zufällig der Entwickler von diesem NOA?
Haben Sie die ganzen Methoden im Kopf?
Oder bin ich nur zu blöd zum Suchen?

Herzlichen Dank ich versuchs gleich!

Jürgen


----------



## Wildcard (19. Feb 2008)

JSteinhilber hat gesagt.:
			
		

> Sagen Sie mal, Sie sind aber nicht zufällig der Entwickler von diesem NOA?


Nein, bei Leibe nicht. Von mir ist lediglich die Methode um Bilder einzufügen, als mini-Codespende und ein kleiner Einzeiler der hoffentlich seinen Weg in die nächste Version finden wird. 
Es ist nicht so schwierig die API zu kennen, sie ist nicht sonderlich groß. Lediglich ein dünner Wrapper um den großen UNO Wald.
Wir können in diesem Forum übrigens ganz formlos beim 'Du' bleiben  :wink:


----------



## JSteinhilber (19. Feb 2008)

Ok. also Du.

Bitte entschuldige "Du" daß ich Dich schon wieder bemühe, aber langsam bin ich der Verzweiflung recht nahe und noch näher an der Entscheidung mir Java und den ganzen Kram anzueignen in die Tonne zu drücken.

Mein Vorhaben: 
Einen Button "OpenOffice beenden", der soll dann OpenOffice nicht beenden, sondern alle Dokumente schließen und anschließend das JPanel unsichtbar machen. Das habe ich mit folgendem Code versucht:


```
private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setText("OpenOffice schliessen");
			jButton1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
					try {
						IDocument[] docs;
						try {
							docs = officeAplication.getDocumentService().getCurrentDocuments();
							for(int i=0;i<docs.length;i++){
				    			 officeAplication.getDocumentService().getCurrentDocuments()[i].close();	 
				    		 }
						} catch (DocumentException e1) {
							e1.printStackTrace();
						}
						jPanel2.setVisible(false);
						jContentPane.validate();
					} catch (OfficeApplicationException e1) {
						e1.printStackTrace();
					}
				}
			});
		}
		return jButton1;
	}
```

So wenn jetzt der Writer wieder gebraucht wird, soll dieser Button den Writer wieder aktivieren und die JPanel sichtbar machen. Das habe ich mit dieser Methode versucht, die ihrerseits von dem "actionperformed" des entsprechenden Buttons aufgerufen wird.

```
public void leeresWriterDokument(){
     	 try {
	    		 IDocument[] docs;
				try {
					docs = officeAplication.getDocumentService().getCurrentDocuments();
		    		 for(int i=0;i<docs.length;i++){
		    			 officeAplication.getDocumentService().getCurrentDocuments()[i].close();	 
		    		 }
				} catch (OfficeApplicationException e) {
					e.printStackTrace();
				}
	 		} catch (DocumentException e1) {
	 			// TODO Auto-generated catch block
	 			e1.printStackTrace();
	 		}										
		  jPanel2.setVisible(true);
		  jContentPane.validate();
}
```
Und was passiert
Kein OpenOffice-Writer sichtbar - nichts, mein JPanel ist so leer, daß es leerer schon gar nicht mehr sein könnte.

Hat mir der Crack einen Tip parat wie ich mein Elend beenden könnte, außer den Tip meinen  Java-Ausflug nach 2 Wochen zu beenden.

Grüße
Jürgen


----------



## Wildcard (19. Feb 2008)

Warum schließt du alle Dokumente wenn du doch eigentlich ein neues erzeugen willst?  ???:L


----------



## JSteinhilber (19. Feb 2008)

Vielleicht steht mir einer auf der Leitung, aber mein Vorhaben ist alles was bislang gelaufen ist zu schließen, gegebenenfalls zu speichern und wenn dann der Knopf neues Dokument gedrück wird soll einfach der Writer mit einem neuen leeren Dokument im JPanel erscheinen. Ich habe in der Methode auch schon

```
document = officeAplication.getDocumentService().constructNewDocument(officeFrame, IDocument.WRITER, DocumentDescriptor.DEFAULT);
```
eingebaut, aber dann bekomme ich wieder kilometerlange Fehlermeldungen.

Herr sieh Dein Volk an....


----------



## Wildcard (19. Feb 2008)

Der Code den du gepostet hast erzeugt kein neues Dokument:

```
public void leeresWriterDokument(){
         try {
              IDocument[] docs;
            try {
               docs = officeAplication.getDocumentService().getCurrentDocuments();
                 for(int i=0;i<docs.length;i++){
                    officeAplication.getDocumentService().getCurrentDocuments()[i].close();   
                 }
            } catch (OfficeApplicationException e) {
               e.printStackTrace();
            }
          } catch (DocumentException e1) {
             // TODO Auto-generated catch block
             e1.printStackTrace();
          }                              
        jPanel2.setVisible(true);
        jContentPane.validate();
}
```
Wie lautet die Fehlermeldung? Wie sieht der Code dazu aus?


----------



## JSteinhilber (19. Feb 2008)

Der Versuche ein neues Dokument zu erzeugen sah ursprünglich so aus:

```
public void leeresWriterDokument(){
     	 try {
	    		 IDocument[] docs;
				try {
					docs = officeAplication.getDocumentService().getCurrentDocuments();
		    		 for(int i=0;i<docs.length;i++){
		    			 officeAplication.getDocumentService().getCurrentDocuments()[i].close();	 
		    		 }
		    		 try {
						document = officeAplication.getDocumentService().constructNewDocument(officeFrame, IDocument.WRITER, DocumentDescriptor.DEFAULT);
					} catch (NOAException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				} catch (OfficeApplicationException e) {
					e.printStackTrace();
				}
	 		} catch (DocumentException e1) {
	 			// TODO Auto-generated catch block
	 			e1.printStackTrace();
	 		}										
		  jPanel2.setVisible(true);
		  jContentPane.validate();
}
```

Der dazugehörige Katastrophenalarm lautet:


```
ag.ion.noa.NOAException: No message available.
	at ag.ion.bion.officelayer.internal.document.DocumentService.constructNewDocument(DocumentService.java:202)
	at testPaket.SwingOpenOffice.leeresDokument(SwingOpenOffice.java:504)
	at testPaket.SwingOpenOffice$3.actionPerformed(SwingOpenOffice.java:226)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at ag.ion.bion.officelayer.internal.document.DocumentLoader.getDocument(DocumentLoader.java:237)
	at ag.ion.bion.officelayer.internal.document.DocumentService.constructNewDocument(DocumentService.java:195)
	... 27 more
```


----------



## Wildcard (19. Feb 2008)

Wo kommt der Frame her? Ich vermute der wurde bereits vorher disposed. Am besten du nimmst einen frischen.


----------



## JSteinhilber (19. Feb 2008)

Meinst Du mit Frame den "officeFrame"?

Sofern ja, den habe ich beim Start des Fensters mit

```
officeFrame = officeAplication.getDesktopService().constructNewOfficeFrame(jPanel2);
```
erstellt und im gesamten Verlauf vor ".dispose()" verschont.

Gruß 
Jürgen


----------



## Wildcard (19. Feb 2008)

Meine Anwendung ist anders gestrickt, ich habe einen Frame pro Dokument, daher kann ich es auch nicht mit Sicherheit sagen, aber ich glaube der Frame wird disposed wenn du sein Document schließt. Mach dir in der Methode erst einen neuen IFrame und pack ihn dann in dein Panel.


----------



## JSteinhilber (19. Feb 2008)

Vielen Dank,
ich versuch's.
Jetzt drücke ich mir noch 3-7 Frust-Weizenbier in den hohlen Grind und dann "schau mer mal"

Gruß
Jürgen


----------



## Wildcard (19. Feb 2008)

Wenn's denn gar nicht funktioniert, kann ich noch auf die Schnelle ein Beispiel 'zusammenklöppeln', dafür bekomme ich dann aber auch ein Weizen ab  :wink:


----------



## JSteinhilber (19. Feb 2008)

Das ist gebongt!

Übrigens trifft meine Befürchtung zu, daß ich keine PN empfangen kann.
Ich bekomme zwar vom Forum-Admin eine Email daß ich eine neue Nachricht erhalten habe, im Eingangsordner ist aber Null Komma Null. Bitte verwende meine Email-Adresse, sofern diese bei Dir nicht angekommen sein sollte einfach in einem neuen Beitrag durchgeben.

Das mit dem Zusammenklöppeln - das wär schon was....
...und in diesem Zusammenhang was ist im puncto Weizen Deine "preferred-size"?
Meine - zum Beispiel - ist König-Ludwig - alternativ Sanwald!

Gruß
Jürgen


----------



## Wildcard (19. Feb 2008)

Hmm, interessant.
Kann daran gelegen haben das meine 'Outbox' voll war. Nochmal verschickt, sag bescheid wenn's nicht ankommt, dann hetze ich stev auf die Sache  :wink:


----------



## JSteinhilber (19. Feb 2008)

Eine von Beiden ist angekommen. Vielen Dank.
Da sollten wir uns noch einmal drüber unterhalten.

Und im puncto Performance gegen VO - keine Chance - sicher!

Gruß und bis sicherlich (notwendigerweise) morgen.

Jürgen


----------



## JSteinhilber (20. Feb 2008)

Oh Wildcard,
ich glaube ohne Dein "Geklöppel" komme ich definitiv nicht weiter.

Das OpenOffice, bzw. dessen Integration - die eigentlich so nebenher statt finden sollte - schafft mich und für Weizenbier ist es noch entschieden zu früh.

Grüße
Jürgen


----------



## Wildcard (20. Feb 2008)

JSteinhilber hat gesagt.:
			
		

> Oh Wildcard,
> ich glaube ohne Dein "Geklöppel" komme ich definitiv nicht weiter.


Ok, ich schau mal nach der Arbeit


----------



## Wildcard (20. Feb 2008)

Nicht toll, aber hilft vielleicht.


```
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import com.sun.star.view.DocumentZoomType;

import ag.ion.bion.officelayer.application.IOfficeApplication;
import ag.ion.bion.officelayer.application.OfficeApplicationException;
import ag.ion.bion.officelayer.application.OfficeApplicationRuntime;
import ag.ion.bion.officelayer.desktop.DesktopException;
import ag.ion.bion.officelayer.desktop.IFrame;
import ag.ion.bion.officelayer.document.DocumentDescriptor;
import ag.ion.bion.officelayer.document.DocumentException;
import ag.ion.bion.officelayer.text.IParagraph;
import ag.ion.bion.officelayer.text.ITextCursor;
import ag.ion.bion.officelayer.text.ITextDocument;
import ag.ion.bion.officelayer.text.TextException;
import ag.ion.noa.NOAException;


public class OfficeFrame
    extends JFrame
{

    private ListPanel listPanel;
    private OfficePanel officePanel;
    
    public OfficeFrame()
    {
        officePanel = new OfficePanel();
        add(officePanel,BorderLayout.CENTER);
        listPanel = new ListPanel(officePanel);
        add(listPanel,BorderLayout.NORTH);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        addWindowStateListener(new WindowStateListener()
        {
        
            public void windowStateChanged(WindowEvent e)
            {
                if(e.getNewState()==WindowEvent.WINDOW_CLOSED);
                {
                    officePanel.terminate();
                    System.exit(0);
                }
        
            }
        
        });
        

    }
    
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        OfficeFrame frame = new OfficeFrame();
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

}


class ListPanel extends JPanel
{
    
    private DefaultListModel model;
    private JList list;
    private OfficePanel officePanel;
    
    public ListPanel(OfficePanel officePanel)
    {
        this.officePanel = officePanel;
        setPreferredSize(new Dimension(800,100));
        setLayout(new BorderLayout());
        model = new DefaultListModel();
        list = new JList(model);
        list.addListSelectionListener(new ListSelectionListener()
        {
        
            public void valueChanged(ListSelectionEvent e)
            {
                ListPanel.this.officePanel.showDocument(String.valueOf(list.getSelectedIndex()));
        
            }
        
        });
        add(list,BorderLayout.CENTER);
        
        JButton add = new JButton("add");
        add.addActionListener(new ActionListener()
        {
        
            public void actionPerformed(ActionEvent arg0)
            {
                model.addElement(String.valueOf(model.getSize()+1));
        
            }
        
        });
        add(add,BorderLayout.EAST);
    }
   
}

class OfficePanel extends JPanel
{
    private CardLayout layout;
    private IOfficeApplication application;
    private Set frames = new HashSet();
    
    public OfficePanel()
    {
        layout = new CardLayout();
        setLayout(layout);
    }
    
    public void showDocument(String title)
    {
        if(!frames.contains(title))
            createOfficeFrame(title);
        layout.show(this, title);
    }

    private void createOfficeFrame(String title)
    {
        if(application==null)
            startApplication();
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(1,1));
        add(panel,title);
        frames.add(title);
        try
        {
            IFrame frame = application.getDesktopService().constructNewOfficeFrame(panel);
            
            ITextDocument doc = (ITextDocument)application.getDocumentService().constructNewDocument(frame,title, DocumentDescriptor.DEFAULT);
            doc.zoom(DocumentZoomType.OPTIMAL, (short)0);
            ITextCursor cursor = doc.getTextService().getCursorService().getTextCursor();
            IParagraph para = doc.getTextService().getTextContentService().constructNewParagraph();
            doc.getTextService().getTextContentService().insertTextContent(cursor.getStart(),para);
            para.getParagraphProperties().setParaStyleName("Title");
            para.setParagraphText("Hallo, ich bin Dokument "+title);
            
            
        }
        catch (DesktopException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (OfficeApplicationException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (NOAException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (DocumentException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (TextException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        validate();
    }

    private void startApplication()
    {
        
        try
        {
            String path = OfficeApplicationRuntime.getApplicationAssistant().getLocalApplications()[0].getHome();
            Map config = new HashMap();
            config.put(IOfficeApplication.APPLICATION_HOME_KEY, path);
            config.put(IOfficeApplication.APPLICATION_TYPE_KEY, IOfficeApplication.LOCAL_APPLICATION);
            application = OfficeApplicationRuntime.getApplication(config);
            application.activate();
        }
        catch (OfficeApplicationException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    public void terminate()
    {
        application.dispose();
    }
    

}
```


----------



## JSteinhilber (20. Feb 2008)

Hallo Wildcard,
herzlichen Dank für Deinen Source.
Ich habe das Teil gleich ausprobiert und - no success....
Auf der Oberfläche ist oben rechts ein Button sichtbar, links davon ein leeres ListPanel.
Das officePanel im Zentrum ist leer.
Drücke ich den add-Knopf erscheint im Listpanel die 1
klicke ich auf die 1 kann ich wieder Bücher schreiben (siehe unten).

Wie mir scheint ist mein Vorhaben eine mittelschwere Katastrophe.
Dir jedenfalls herzlichen Dank für Deine Bemühungen.
Grüße
Jürgen

Die Fehlermeldung lautet:

```
ag.ion.bion.officelayer.application.OfficeApplicationException: no ICE_JNIRegistry in java.library.path
	at ag.ion.bion.officelayer.internal.application.ApplicationAssistant.<init>(ApplicationAssistant.java:104)
	at ag.ion.bion.officelayer.application.OfficeApplicationRuntime.getApplicationAssistant(OfficeApplicationRuntime.java:139)
	at testPaket.OfficePanel.startApplication(OfficeFrame.java:202)
	at testPaket.OfficePanel.createOfficeFrame(OfficeFrame.java:152)
	at testPaket.OfficePanel.showDocument(OfficeFrame.java:145)
	at testPaket.ListPanel$1.valueChanged(OfficeFrame.java:107)
	at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
	at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.setSelectionInterval(Unknown Source)
	at javax.swing.JList.setSelectionInterval(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.adjustSelection(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.mousePressed(Unknown Source)
	at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError: no ICE_JNIRegistry in java.library.path
	at java.lang.ClassLoader.loadLibrary(Unknown Source)
	at java.lang.Runtime.loadLibrary0(Unknown Source)
	at java.lang.System.loadLibrary(Unknown Source)
	at ag.ion.bion.officelayer.internal.application.ApplicationAssistant.<init>(ApplicationAssistant.java:101)
	... 37 more
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at testPaket.OfficePanel.createOfficeFrame(OfficeFrame.java:158)
	at testPaket.OfficePanel.showDocument(OfficeFrame.java:145)
	at testPaket.ListPanel$1.valueChanged(OfficeFrame.java:107)
	at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
	at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.setSelectionInterval(Unknown Source)
	at javax.swing.JList.setSelectionInterval(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.adjustSelection(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.mousePressed(Unknown Source)
	at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
ag.ion.bion.officelayer.application.OfficeApplicationException: no ICE_JNIRegistry in java.library.path
	at ag.ion.bion.officelayer.internal.application.ApplicationAssistant.<init>(ApplicationAssistant.java:104)
	at ag.ion.bion.officelayer.application.OfficeApplicationRuntime.getApplicationAssistant(OfficeApplicationRuntime.java:139)
	at testPaket.OfficePanel.startApplication(OfficeFrame.java:202)
	at testPaket.OfficePanel.createOfficeFrame(OfficeFrame.java:152)
	at testPaket.OfficePanel.showDocument(OfficeFrame.java:145)
	at testPaket.ListPanel$1.valueChanged(OfficeFrame.java:107)
	at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
	at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(Unknown Source)
	at javax.swing.JList.setValueIsAdjusting(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError: no ICE_JNIRegistry in java.library.path
	at java.lang.ClassLoader.loadLibrary(Unknown Source)
	at java.lang.Runtime.loadLibrary0(Unknown Source)
	at java.lang.System.loadLibrary(Unknown Source)
	at ag.ion.bion.officelayer.internal.application.ApplicationAssistant.<init>(ApplicationAssistant.java:101)
	... 33 more
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at testPaket.OfficePanel.createOfficeFrame(OfficeFrame.java:158)
	at testPaket.OfficePanel.showDocument(OfficeFrame.java:145)
	at testPaket.ListPanel$1.valueChanged(OfficeFrame.java:107)
	at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
	at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(Unknown Source)
	at javax.swing.JList.setValueIsAdjusting(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
```


----------



## Wildcard (20. Feb 2008)

```
ag.ion.bion.officelayer.application.OfficeApplicationException: no ICE_JNIRegistry in java.library.path
```
Die dll muss in deinem library path sein.


----------



## JSteinhilber (20. Feb 2008)

Hallo Wildcard,
habe ich sofort erledigt.

Das Ergebnis lautet


```
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
	at testPaket.OfficePanel.startApplication(OfficeFrame.java:202)
	at testPaket.OfficePanel.createOfficeFrame(OfficeFrame.java:152)
	at testPaket.OfficePanel.showDocument(OfficeFrame.java:145)
	at testPaket.ListPanel$1.valueChanged(OfficeFrame.java:107)
	at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
	at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.setSelectionInterval(Unknown Source)
	at javax.swing.JList.setSelectionInterval(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.adjustSelection(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.mousePressed(Unknown Source)
	at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
	at testPaket.OfficePanel.startApplication(OfficeFrame.java:202)
	at testPaket.OfficePanel.createOfficeFrame(OfficeFrame.java:152)
	at testPaket.OfficePanel.showDocument(OfficeFrame.java:145)
	at testPaket.ListPanel$1.valueChanged(OfficeFrame.java:107)
	at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
	at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(Unknown Source)
	at javax.swing.JList.setValueIsAdjusting(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
```


----------



## Wildcard (20. Feb 2008)

Hast du keine reguläre Installation?
Am besten du gibst dann den Pfad manuell an. WIe das geht müsstest du ja wissen, du hast OOo ja auch schon selbst eingebunden.


----------



## JSteinhilber (21. Feb 2008)

Hallo Wildcard,
herzlichen Dank für die Hilfe. Hier ein kurzer Bericht. Den Pfad habe ich von Hand eingetragen.
Nachdem ich die Anwendung gestartet habe - herbe Enttäuschung,  da das selbe Phänomen wie in meinem Beispiel.
Nun habe ich festgestellt, daß ich die jars des OOo-SDK im Buildpfad eingetragen gehabt habe.
Nachdem ich diese durch die jars von NOA ersetzt hatte lief alles glatt.

Aber eines verstehe ich immer noch nicht.
Weshalb verschwindet der ganze Frame wenn ich lediglich ein Dokument schließe?

```
application.getDocumentService().getCurrentDocuments()[0].close();
```
Läßt sich das irgendwie verhindern?

Und dann produzierst Du ja mit jedem neuen leeren Dokument auch ein neues JPanel


> if(application==null)
> startApplication();
> JPanel panel = new JPanel();
> System.out.println("Neues Panel erstellt");
> ...



Was passiert dann mit den vorhandenen JPanels werden die automatisch freigegeben und vom GarbageCollector erfasst?
Oder geht das eben solange bis der Speicher voll ist und dann ist Sendepause?

Grüße an Dich
Jürgen


----------



## Wildcard (21. Feb 2008)

> Weshalb verschwindet der ganze Frame wenn ich lediglich ein Dokument schließe?


Wenn du das Dokument schließt das im Frame angezeigt wird, beendet sich auch der Frame.


			
				JSteinhilber hat gesagt.:
			
		

> Was passiert dann mit den vorhandenen JPanels werden die automatisch freigegeben und vom GarbageCollector erfasst?
> Oder geht das eben solange bis der Speicher voll ist und dann ist Sendepause?


Das ist jetzt ein Mini-Beispiel. Ich verwende einen Frame pro Dokument das ich gleichzeitig um Speicher halten will.
Wählst du einen Eintrag in der List aus, für den schon ein Dokument existiert, wird nur das CardLayout umgeschaltet.
So läuft dir natürlich irgendwann der Speicher voll, aber dafür kannst du Ruck-Zuck ohne Ladepause zwischen mehreren Dokumenten umschalten. In der Praxis solltest du eine Queue festlegen und nach sagen wir 10 Dokumenten, das Dokument das am längsten nicht angezeigt wurde schließen und aus der Queue und dem Panel werfen.
Hängt natürlich alles ein wenig von deiner Anwendung ab.


----------



## JSteinhilber (21. Feb 2008)

Perfekt Wildcard!

Jetzt bliebe noch die Frage mit dem Weizenbier zu klären und das nächste Problem abzuwarten.

Herzliche Grüße
Jürgen

Ach ja eine Frage habe ich noch.
Ich übersetze ja gerade unsere Reha-Verwaltung in Java (d.h. ich versuche es)......
Ein großes Modul ist der Arztbericht und zugehörige Textbausteine, die an der aktuellen Cursorposition im Fliesstext eingefügt werden können.

Bislang sah das in etwa so aus.

```
sText := rs:getString("Baustein")
aktPos := oCXText:getCursPos()
geklappt := oCXText:insertTextAt(aktPos,sText)
```

Ist die NOA-Variante ähnlich oder muß da z.B. der Text aufgeteilt weden in 
Text vor dem eingefügten + eingefügter Text + Text nach dem eingefügten.


----------



## Wildcard (21. Feb 2008)

Du kannst beliebig viele ICursor verwenden. Dort fügst du dann Paragraphen ein. Den Text und den Style eines Paragraphen kannst du beliebig ändern. Mit der TextContentEnumeration kannst du über die einzelnen Paragraphs iterieren,...
Alternativ gibt es dann noch die TextRanges um beispielsweise einen bestimmten Text Bereich zu ersetzen.


----------

