Org.eclipse.swt.SWTException: Invalid thread access - Action struts

Hi
I�m runing this WordSearchReplace java class that I got here in this forum, and I�m runing it doing search and replace in Ms word document if I run just one time it works ok, but if I run twice i got that erro, I�m runing that java class in my Action on struts.
I don�t know what is occur.
Can you help me?
Thanks
Following the example of call, mistakes and java class.
//======RUNING THE WordSearchReplace JAVA CLASS=========
WordSearchReplace wordSR = null;
try {
String[] v_text = {"#V46#","#V42#"};
String[] v_replace = {"Texto1","Texto2"};
wordSR = new WordSearchReplace();
wordSR.openFile(v_path+v_file_name);
for ( int i=0; i<v_text.length; i++ )
wordSR.replace( v_text, v_replace[i] );
wordSR.save();
wordSR.closeFile();
catch(Exception e) {
System.out.println("Caught: ERRO ao Executar WordSearchReplace " + e.getClass().getName());
System.out.println(e.getMessage());
e.printStackTrace(System.out);
finally {
if(wordSR != null) {
try {
wordSR.dispose();
catch(Exception innerE) {
System.out.println("Caught: " + innerE.getClass().getName());
System.out.println(innerE.getMessage());
innerE.printStackTrace(System.out);
//========ERRO ===========================
17:24:49,093 INFO [STDOUT] Invalid thread access
17:24:49,093 INFO [STDOUT] org.eclipse.swt.SWTException: Invalid thread access
17:24:49,093 INFO [STDOUT] at org.eclipse.swt.SWT.error(SWT.java:3563)
17:24:49,093 INFO [STDOUT] at org.eclipse.swt.SWT.error(SWT.java:3481)
17:24:49,093 INFO [STDOUT] at org.eclipse.swt.SWT.error(SWT.java:3452)
17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Widget.error(Widget.java:432)
17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Shell.<init>(Shell.java:274)
17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Shell.<init>(Shell.java:265)
17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Shell.<init>(Shell.java:218)
17:24:49,093 INFO [STDOUT] at org.eclipse.swt.widgets.Shell.<init>(Shell.java:156)
17:24:49,093 INFO [STDOUT] at br.com.tryblob.view.WordSearchReplace.<init>(WordSearchReplace.java:38)
17:24:49,093 INFO [STDOUT] at br.com.tryblob.view.WordAction.execute(WordAction.java:70)
17:24:49,093 INFO [STDOUT] at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
17:24:49,093 INFO [STDOUT] at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
17:24:49,093 INFO [STDOUT] at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
17:24:49,093 INFO [STDOUT] at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
17:24:49,093 INFO [STDOUT] at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
//====== WordSearchReplace JAVA CLASS=========
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.internal.ole.win32.TYPEATTR;
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.OleFunctionDescription;
import org.eclipse.swt.ole.win32.OlePropertyDescription;
import org.eclipse.swt.ole.win32.OleParameterDescription;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.ole.win32.Variant;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
public class WordSearchReplace {
     private static final String PROG_ID = "Word.Application";
     private static final int WD_REPLACE_ALL = 2;
     private static final int WD_FIND_CONTINUE = 1;
     private Shell shell = null;
     private OleFrame frame = null;
     private OleClientSite wordSite = null;
     private OleAutomation wordAutomation = null;
     private OleAutomation activeDocumentAutomation = null;
     private boolean cleaned = false;
     * Create a new instance of the WordSearchReplace class.
     public WordSearchReplace() {
          this.shell = new Shell();
          this.frame = new OleFrame(this.shell, SWT.NONE);
          this.wordSite = new OleClientSite(this.frame, SWT.NONE, WordSearchReplace.PROG_ID);
     this.wordAutomation = new OleAutomation(this.wordSite);
     * Open an MS Word file. This is a file whose name ends with the extension
     * .doc or .doc and which conforms to the correct format.
     * Note; if it is possible to open the named file, an attempt is made
     * to cache an OleAutomation object referencing that file which will be
     * referred to in future as the active document. Most other methods
     * need to capture references to further OleAutomation(s) that have the
     * active document as their root.
     * @param fileName An instance of the String class that encapsulates the
     * path to and name of the file that is to be opened.
     * Note; the full path name must be supplied as Word
     * will be opening the file and no assumptions can
     * safely be made concerning the applications 'home'
     * folder.
     * @throws NullPointerException if a null value is passed to the fileName
     * parameter.
     * @throws FileNotFoundException if it is not possible to locate the
     * file.
     * @throws IllegalArgumentException if the name of the file does not end
     * with either the .dot or .doc extensions.
     * @throws SWTException if a problem occurs whilst invoking any of the OLE
     * methods.
     public void openFile(String fileName) throws SWTException,
     NullPointerException,
     FileNotFoundException,
     IllegalArgumentException {
          OleAutomation documentsAutomation = null;
          int[] id = null;
          Variant[] arguments = null;
          Variant invokeResult = null;
          try {
               // Check the the file name is not null
               if(fileName == null) {
                    throw new NullPointerException("Null value passed to " +
                         "fileName parameters of the openFile() method.");
               // Check the the file names ends with '.dot' or '.doc'.
               // Remember to include templates and docuemnts
               if(!(fileName.endsWith(".doc")) && !(fileName.endsWith(".dot"))) {
                    throw new IllegalArgumentException(
                         "The filename must end with the extensions \'.doc\' or \'.dot\'");
               // Check that the file exists
               File fileToPrint = new File(fileName);
               if(!(fileToPrint.exists())) {
                    throw new FileNotFoundException("The file " +
                    fileName +
                    "cannot be found.");
               // From the application, get an automation for the Documents property
               documentsAutomation = this.getChildAutomation(this.wordAutomation,
               "Documents");
               // Get the ID of the Open method
               id = documentsAutomation.getIDsOfNames(new String[]{"Open"});
               if(id == null) {
                    throw new SWTException("It was not possible to recover an " +
                    "identifer for the Open method in WordSearchReplace.openFile().");
               // Build an array of parameters - holds just the file name
               arguments = new Variant[1];
               arguments[0] = new Variant(fileName);
               // Invoke the Open method on the Documents property
               invokeResult = documentsAutomation.invoke(id[0], arguments);
               // If the call to invoke the open method failed, throw an SWTException
               // to terminate processing.
               if(invokeResult == null) {
                    throw new SWTException("An error occurred whilst invoking the " +
                         "Open method for the following file: " +
                         fileName +
                         " in WordSearchReplace.openFile().");
               // If it was possible to open the document successfully, grab an
               // automation object referencing the active document here.               
               else {
                    this.activeDocumentAutomation = this.getChildAutomation(
                         this.wordAutomation, "ActiveDocument");
          finally {
               // If the automation was instantiated then dispose of it to
               // release resources. This OleAutomation was only required
               // to open the file and can safely be released here.
               if(documentsAutomation != null) {
                    documentsAutomation.dispose();
     * Save the currently open file - the active document.
     * @throws SWTException if a problem occurs whilst invoking any of the OLE
     * methods.
     public void save() throws SWTException {
          int[] id = null;
          Variant invokeResult = null;
          // From the automation for the ActiveDocument object, get an id for
          // the Save method
          id = this.activeDocumentAutomation.getIDsOfNames(new String[]{"Save"});
          // If it was not possible to recover the id of the Save
          // method, throw an exception to notify the user and terminate
          // processing.
          if(id == null) {
               throw new SWTException("Unable to obtain an automation for " +
                    "the Save method in WordSearchReplace.save().");
          // Invoke the Save method and catch the value returned
          invokeResult = this.activeDocumentAutomation.invoke(id[0]);
          // If a null value was returned then the invocation of the
          // Save method failed. Throw an exception to notify the
          // user and terminate processing.
          if(invokeResult == null) {
               throw new SWTException("A problem occurred invoking the " +
                    "Save method in WordSearchReplace.save().");
     * Save the active document using the name provided.
     * @param fileName Am instance of the String class encapsulating the name
     * for the file. Again, the path to and name of the file should
     * be supplied.
     * @throws NullPointerException if a null value is passed to the fileName
     * parameter.
     * @throws IllegalArgumentException if either an empty String is passed
     * to the fileName parameter or if the files name does not end
     * with one of the two permissible extensions - .dot and .doc
     public void saveAs(String fileName) throws SWTException,
     NullPointerException,
     IllegalArgumentException {
          int[] id = null;
          Variant[] arguments = null;
          Variant invokeResult = null;
          // If the fileName parameter is passed a null
          // value, throw an exception.
          if(fileName == null) {
               throw new NullPointerException("A null value was passed to " +
                    "the fileName parameter of WordSearchReplace.saveAs().");
          // If the fileName parameter has been passed an empty String
          // then again throw an exception.
          if(fileName.length() == 0) {
               throw new NullPointerException("An empty string was passed " +
                    "to the fileName parameter of WordSearchReplace.saveAs().");
          // Finally, make sure the file name ends in either
          // .doc or .dot.
          if((!fileName.endsWith(".dot")) && (!fileName.endsWith(".doc"))) {
               throw new IllegalArgumentException("An illegal file name was " +
                    "passed to the fileName parameter of " +
                    "WordSearchReplace.saveAs(). The file name must " +
                    "end in \'.dot\' or \'.doc\'.");
          // From the automation for the ActiveDocument object, get an id for
          // the SaveAs method
          id = this.activeDocumentAutomation.getIDsOfNames(new String[]{"SaveAs"});
          // If it was not possible to recover the id of the SaveAs
          // method, throw an exception to notify the user and terminate
          // processing.
          if(id == null) {
               throw new SWTException("Unable to obtain an automation for " +
                    "the SaveAs method in WordSearchReplace.saveAs().");
          // Build the array of arguments that will be passed to the invoke
          // method when the SaveAs method is invoked. In this case, this
          // array will contain a single member - a String object encapsulating
          // the path to and name of the output file.
          arguments = new Variant[1];
          arguments[0] = new Variant(fileName);
          // Invoke the SaveAs method and catch the value returned
          invokeResult = this.activeDocumentAutomation.invoke(id[0], arguments);
          // If a null value was returned then the invocation of the
          // PrintOut method failed. Throw an exception to notify the
          // user and terminate processing.
          if(invokeResult == null) {
               throw new SWTException("A problem occurred invoking the " +
                    "SaveAs method in WordSearchReplace.saveAs().");
     * Mimics Words 'replace' functionality by searching the active
     * document for evey string of characters that matches the value passed to
     * the searchTerm parameter and replacing them with the string of
     * characters passed to the replacementTerm method.
     * It is possible to code a VBA macro within Word that will perfrom a serach
     * and replace. That code would look like the following;
     * <pre>
     *      Selection.Find.ClearFormatting
*     Selection.Find.Replacement.ClearFormatting
*     With Selection.Find
*      .Text = "serach"
*      .Replacement.Text = "search"
*      .Forward = True
*      .Wrap = wdFindContinue
*      .Format = False
*      .MatchCase = False
*      .MatchWholeWord = False
*      .MatchWildcards = False
*      .MatchSoundsLike = False
*      .MatchAllWordForms = False
*     End With
*     Selection.Find.Execute Replace:=wdReplaceAll
* <pre>
* and this method will 'automate' it.
     * @param searchTerm An instance of the String class that will encapsulate
     * the series of characters that should be replaced.
     * @param replacementTerm An instance of the String class that will
     * encapsulate the series of characters that should replace the
     * searchTerm.
     * @throws NullPointerException if a null value is passed to either the
     * searchTerm or replacementTerm methods.
     * @throws SWTException if a problem occurs when invoking any of the
     * OLE methods.
     public void replace(String searchTerm,
     String replacementTerm) throws SWTException,
     NullPointerException {
          OleAutomation selectionFindAutomation = null;
          OleAutomation childAutomation = null;
          Variant[] arguments = null;
          Variant invokeResult = null;
          int[] id = null;
          int[] namedArguments = null;
          boolean success = true;
          // Validate the searchTerm parameter and throw exception if
          // null value passed.
          if(searchTerm == null) {
               throw new NullPointerException("Null value passed to " +
                         "searchTerm parameter of the replace() method.");
          // Validate the replacementTerm parameter and throw exception if
          // null value passed.
          if(replacementTerm == null) {
               throw new NullPointerException("Null value passed to " +
                         "replacementTerm parameter of the replace() method.");
          // Most of the VBA instructions used to perform the search and
          // replace functionality and child automations of Selection.Find,
          // therefore, it is wise to cache that automation first.
          // From the application, get an automation for the Selection property
          childAutomation = this.getChildAutomation(this.wordAutomation,
               "Selection");
          selectionFindAutomation = this.getChildAutomation(childAutomation,
          "Find");
          // Next, using the cached automation, invoke the 'ClearFormatting'
          // method, validate the returned value and invoke the method.
          // Selection.Find.ClearFormatting
          id = selectionFindAutomation.getIDsOfNames(new String[]{"ClearFormatting"});
          if(id == null) {
               throw new SWTException("It is not possible to recover an identifier " +
                    "for the ClearFormatting method in WordSearchReplace.replace() " +
                    "when clearing the formatting for the search string.");
          invokeResult = selectionFindAutomation.invoke(id[0]);
          if(invokeResult == null) {
               throw new SWTException("A problem occurred invoking the " +
                    "ClearFormatting method in WordSearchReplace.repace() " +
                    "when clearing formatting for the search string.");
          // Now, perform the same function but for the replacement string.
          // Selection.Find.Replacement.ClearFormatting
          childAutomation = this.getChildAutomation(selectionFindAutomation,
          "Replacement");
          id = childAutomation.getIDsOfNames(new String[]{"ClearFormatting"});
          if(id == null) {
               throw new SWTException("It is not possible to recover an identifier " +
                    "for the ClearFormatting method in WordSearchReplace.replace() " +
                    "when clearing the formatting for the replacement string.");
          invokeResult = childAutomation.invoke(id[0]);
          if(invokeResult == null) {
               throw new SWTException("A problem occurred invoking the " +
                    "ClearFormatting method in WordSearchReplace.repace() " +
                    "when clearing formatting for the replacement string.");
          // Firstly, set the search text.
          // .Text = "search term"
          arguments = new Variant[1];
          arguments[0] = new Variant(searchTerm);
          success = this.setPropertyValue(selectionFindAutomation, "Text", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the Text " +
                    "property for the search string in WordSearchReplace.replace().");
          // Next, the replacement text
          // .Replacement.Text = "replacement term"
          childAutomation = this.getChildAutomation(selectionFindAutomation,
          "Replacement");
          arguments[0] = new Variant(replacementTerm);
          success = this.setPropertyValue(childAutomation, "Text", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the Text property" +
                    " for the replacement string in WordSearchReplace.replace().");
          // Set the direction of the search - forward in this case.
          // .Forward = True
          arguments[0] = new Variant(true);
          success = this.setPropertyValue(selectionFindAutomation, "Forward", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the Forward " +
                    "property in WordSearchReplace.replace().");
          // Tell the search to wrap. Note the literal wdFindContinue relates to
          // a constant that is defined within Word. I have provided a static
          // final to replace it called WD_FIND_CONTINUE
          // .Wrap = wdFindContinue
          arguments[0] = new Variant(WordSearchReplace.WD_FIND_CONTINUE);
// System.out.println("jose vieira WD_FIND_CONTINUE:" + arguments[0]);
          success = this.setPropertyValue(selectionFindAutomation, "Wrap", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the Wrap " +
                    "property in WordSearchReplace.replace().");
          // Set the Format property to False.
          // .Format = False
          arguments[0] = new Variant(false);
          success = this.setPropertyValue(selectionFindAutomation, "Format", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the Format " +
                    "property in WordSearchReplace.replace().");
          // Set the MatchCase property to false.
          // .MatchCase = False
          arguments[0] = new Variant(false);
          success = this.setPropertyValue(selectionFindAutomation, "MatchCase", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the MatchCase " +
                    "property in WordSearchReplace.replace().");
          // Set the MatchWholeWord property to false.
          // .MatchWholeWord = False
          arguments[0] = new Variant(false);
          success = this.setPropertyValue(selectionFindAutomation, "MatchWholeWord", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the " +
                    "MatchWholeWord property in WordSearchReplace.replace().");
          // Set the MatchWildCards property to false.
          // .MatchWildcards = False
          arguments[0] = new Variant(false);
          success = this.setPropertyValue(selectionFindAutomation, "MatchWildCards", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the " +
                    "MatchWildCards property in WordSearchReplace.replace().");
          // Set the MatchSoundsLike property to false.
          // .MatchSoundsLike = False
          arguments[0] = new Variant(false);
          success = this.setPropertyValue(selectionFindAutomation, "MatchSoundsLike", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the " +
                    "MatchSoundsLike property in WordSearchReplace.replace().");
          // Set the MatchAllWordForms property to false.
          // .MatchAllWordForms = False
          arguments[0] = new Variant(false);
          success = this.setPropertyValue(selectionFindAutomation, "MatchAllWordForms", arguments);
          if(!success) {
               throw new SWTException("A problem occurred setting the " +
                    "MatchAllWordForms property in WordSearchReplace.replace().");
          // Invoke the Execute command passing the correct value to the Replace
          // parameter. Again, wdReplaceAll is a constant that I have provided
          // a ststic final for called WD_REPLACE_ALL
          // Selection.Find.Execute Replace:=wdReplaceAll
          id = selectionFindAutomation.getIDsOfNames(new String[]{"Execute", "Replace"});
          if(id == null) {
               throw new SWTException("It was not possible to recover an identifier " +
                    "for the Execute method in WordSearchReplace.replace().");
          arguments = new Variant[1];
          arguments[0] = new Variant(WordSearchReplace.WD_REPLACE_ALL);
          namedArguments = new int[1];
          namedArguments[0] = id[1];
          // There was some indication that the invokeNoReply method should
          // be used when making this call but no, invoke SEEMS to work well
          //selectionFindAutomation.invokeNoReply(id[0], arguments, namedArguments);
          invokeResult = selectionFindAutomation.invoke(id[0], arguments, namedArguments);
          if(invokeResult == null) {
               throw new SWTException("A problem occurred trying to invoke the " +
               "Execute method in WordSearchReplace.replace().");
     * Close the active document.
     * @throws SWTException if a problem is encountered invoking any of the
     * OLE methods.
     public void closeFile() throws SWTException {
          int[] id = null;
          Variant[] arguments = null;
          Variant invokeResult = null;
          try {
               // From the OleAutomation referencing the active document, recover
               // the id of the Close method.
               id = this.activeDocumentAutomation.getIDsOfNames(new String[]{"Close"});
               // If it was not possible to recover the id of the Close
               // method then throw an exception to notify the user and
               // terminate processing.
               if(id == null) {
                    throw new SWTException("It was not possible to recover an " +
                         "identifier for the Close method in " +
                         "WordSearchReplace.closeFile().");
               // Invoke the Close method on the ActiveDocument automation
               invokeResult = this.activeDocumentAutomation.invoke(id[0]);
               // If the invocation of the Close method failed, throw an
               // exception to notify the user and terminate processing.
               if(invokeResult == null) {
                    throw new SWTException(
                         "An error occurred invoking the Close method in " +
                         "WordSearchReplace.closeFile().");
          finally {
               if(this.activeDocumentAutomation != null) {
                    this.activeDocumentAutomation.dispose();
     * Release resources.
     public void dispose() throws SWTException {
          try {
               // Set the cleaned flag to true. This prevents the method from
               // running again if it is called from the finalize() method
               this.cleaned = true;
               // From the word automation, recover the id of the Quit method
               int[] id = this.wordAutomation.getIDsOfNames(new String[]{"Quit"});
               // If the id of the Quit method cannot be recovered
               // throw an exception - not much good really though.
               if(id == null) {
                    throw new SWTException("Unable to obtain an id for the Quit " +
                         "property in WordSearchReplace.dispose().");
               // Invoke Quit
          Variant result = this.wordAutomation.invoke(id[0]);
          // If an error occurs during the invocation, throw an exception.
          // Again though that exception is of limited value.
          if(result == null) {
               throw new SWTException("A problem occurred trying to invoke the " +
                    "Quit method in WordSearchReplace.dispose().");
     finally {
          // Finally, dispose of the word application automation.
          this.wordAutomation.dispose();
     * The finalize() method has been over-ridden to ensure that resources
     * are correctly released if a WordSearchReplace object is created but
     * not disposed of properly before it becomes eligible for garbage
     * collection. The cleaned flag is used as acheck to ensure that the
     * dispose() method cannot be called more than once.
     public void finalize() throws Throwable {
          if(!this.cleaned) {
               this.dispose();
     * Creates and returns a 'child' OleAutomation object. The object model
     * employed by Word, Excel and the like, arrange objects, methods and
     * properties hierarchically. To invoke a method, it is often necessary
     * to iterate through this hierarchy from parent to child and this method
     * supports that process.
     * @param automation An OleAutomation object that references the parent
     * automation.
     * @param childName An instance of the String class that encapsulates the
     * name of the child automation.
     * @throws SWTException if a problem is encountered invoking one or
     * other of the OLE methods.
     private OleAutomation getChildAutomation(OleAutomation automation,
     String childName) throws SWTException {
          // Try to recove the unique identifier for the child automation
          int[] id = automation.getIDsOfNames(new String[]{childName});
          // If the identifier cannot be found then throw an exception to
          // terminate processing.           
          if (id == null) {
               throw new SWTException(
                    "A problem occurred trying to obtain and id for: " +
               childName +
               "in the getChildAutomation() method.");
          // SWT's implementation of OLE referes to all of Words objects, methods
          // and properties using the single term 'property'. The next stage
          // therefore is to recover a refence to the 'property' that relates
          // to the child automation.
          Variant pVarResult = automation.getProperty(id[0]);
          // If it is not possible to recover a 'property' for the child
          // automation, then throw an SWTException.
          if (pVarResult == null) {
               throw new SWTException(
                    "A problem occurred trying to obtain an automation for property: " +
               id[0] +
               " in the getChildAutomation() method.");
          // As we are after a child automation in this instance, call the
          // getAutomation() method on the 'property'.
          return(pVarResult.getAutomation());
     * Sets the value of a property.
     * @param automation An instance of the OleAutomation class that will
     * hold a reference to the properties parent automation object
     * @param propertyName An instance of the String class that encapsulates the
     * name of the property whose value is to be set.
     * @param arguments An array of type Variant whose elements contain the
     * values that will be set for the named property.
     * @return A primitive boolean value that indicates whether or not the
     * properties value was successfully set.
     * @throws NullPointerException will be thrown if a null value is passed to
     * any of the methods three arguments.
     * @throws IllegalArgumentException will be thrown if an empty String
     * is passed to the propertyName parameter or if an empty array
     * is passed to the arguments parameter. Note, no check is made
     * on the vallues of the elements in the arguments array.
     * @throws SWTException will be thrown if a problem is encountered
     * imvoking any of the OLE methods.
     private boolean setPropertyValue(OleAutomation automation,
     String propertyName,
     Variant[] arguments) throws SWTException,
     NullPointerException,
     IllegalArgumentException {
          // Validate the various parameters
          if(automation == null) {
               throw new NullPointerException(
                    "A null value was pas

Alright, I'll try to keep it as simple as possible. If that's not going to work out, we can always complicate it later :)
I suppose you had a look at the link and I assume you know about threads.
We can easily fix this issue if you are instantiating, calling and disposing the object within one thread, e.g. you use it only in one method like
public mySwtExecutionMethod(String fileName){
  WordSearchReplace replace = new WordSearchReplace();
  // do your replacing here
  replace.dispose();
  // no reference to replace is left so it won't escape this thread
}Now the fix for your class becomes simple. As you remember from the link, you have to call all methods from within the UI thread. We will now create a Display every time upon instantiation of WordSearchReplace, so the current thread becomes the UI thread.
I had a look at the constructor, and the overhead doesn't seem that bad, provided this is not a dedicated search&replace server.
private final Display display;
public WordSearchReplace()
     display = new Display(); // create display
     this.shell = new Shell(display);   // initialize shell with new display so this thread becomes the UI thread
     this.frame = new OleFrame(this.shell, SWT.NONE);
     this.wordSite = new OleClientSite(this.frame, SWT.NONE, WordSearchReplace.PROG_ID);
     this.wordAutomation = new OleAutomation(this.wordSite);
}Since we always create a new Display, we should also dispose it. There is already a dispose() method, so we just have to add to it
display.dispose();That's it!
If you hold on longer to your reference and this isn't working for you, you'd have to do a lot more synchronizing and that the UI thread still exist as long as the reference.
Wish you good luck

Similar Messages

  • Search replace Word doc - Getting Erro : org.eclipse.swt.SWTException:

    Hi
    All
    I'm runing this Java class by a jsp to Search and Replace and saveAs a word document, when run the fisrt time it works OK, but if I run again I got this error:
    What is happing there?
    Following the Error and Source Java.
    Thanks
    11:59:49,234 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
    org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.swt.SWT.error(SWT.java:3563)
    at org.eclipse.swt.SWT.error(SWT.java:3481)
    at org.eclipse.swt.SWT.error(SWT.java:3452)
    at org.eclipse.swt.widgets.Widget.error(Widget.java:432)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:274)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:265)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:218)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:156)
    at br.com.tryblob.view.WordSearchReplace.<init>(WordSearchReplace.java:36)
    at org.apache.jsp.replacedoc_jsp._jspService(replacedoc_jsp.java:48)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
    at java.lang.Thread.run(Unknown Source)
    12:00:56,843 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
    org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.swt.SWT.error(SWT.java:3563)
    at org.eclipse.swt.SWT.error(SWT.java:3481)
    at org.eclipse.swt.SWT.error(SWT.java:3452)
    at org.eclipse.swt.widgets.Widget.error(Widget.java:432)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:274)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:265)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:218)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:156)
    at br.com.tryblob.view.WordSearchReplace.<init>(WordSearchReplace.java:36)
    at org.apache.jsp.replacedoc_jsp._jspService(replacedoc_jsp.java:48)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
    at java.lang.Thread.run(Unknown Source)
    ==================JAVA CLASS=====================
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.SWTException;
    import org.eclipse.swt.internal.ole.win32.TYPEATTR;
    import org.eclipse.swt.ole.win32.OLE;
    import org.eclipse.swt.ole.win32.OleAutomation;
    import org.eclipse.swt.ole.win32.OleClientSite;
    import org.eclipse.swt.ole.win32.OleFrame;
    import org.eclipse.swt.ole.win32.OleFunctionDescription;
    import org.eclipse.swt.ole.win32.OlePropertyDescription;
    import org.eclipse.swt.ole.win32.OleParameterDescription;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.ole.win32.Variant;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.BufferedWriter;
    import java.io.IOException;
    public class WordSearchReplace {
         private static final String PROG_ID = "Word.Application";
         private static final int WD_REPLACE_ALL = 2;
         private static final int WD_FIND_CONTINUE = 1;
         private Shell shell = null;
         private OleFrame frame = null;
         private OleClientSite wordSite = null;
         private OleAutomation wordAutomation = null;
         private OleAutomation activeDocumentAutomation = null;
         private boolean cleaned = false;
         * Create a new instance of the WordSearchReplace class.
         public WordSearchReplace() {
              this.shell = new Shell();
              this.frame = new OleFrame(this.shell, SWT.NONE);
              this.wordSite = new OleClientSite(this.frame, SWT.NONE, WordSearchReplace.PROG_ID);
         this.wordAutomation = new OleAutomation(this.wordSite);
         * Open an MS Word file. This is a file whose name ends with the extension
         * .doc or .doc and which conforms to the correct format.
         * Note; if it is possible to open the named file, an attempt is made
         * to cache an OleAutomation object referencing that file which will be
         * referred to in future as the active document. Most other methods
         * need to capture references to further OleAutomation(s) that have the
         * active document as their root.
         * @param fileName An instance of the String class that encapsulates the
         * path to and name of the file that is to be opened.
         * Note; the full path name must be supplied as Word
         * will be opening the file and no assumptions can
         * safely be made concerning the applications 'home'
         * folder.
         * @throws NullPointerException if a null value is passed to the fileName
         * parameter.
         * @throws FileNotFoundException if it is not possible to locate the
         * file.
         * @throws IllegalArgumentException if the name of the file does not end
         * with either the .dot or .doc extensions.
         * @throws SWTException if a problem occurs whilst invoking any of the OLE
         * methods.
         public void openFile(String fileName) throws SWTException,
         NullPointerException,
         FileNotFoundException,
         IllegalArgumentException {
              OleAutomation documentsAutomation = null;
              int[] id = null;
              Variant[] arguments = null;
              Variant invokeResult = null;
              try {
                   // Check the the file name is not null
                   if(fileName == null) {
                        throw new NullPointerException("Null value passed to " +
                             "fileName parameters of the openFile() method.");
                   // Check the the file names ends with '.dot' or '.doc'.
                   // Remember to include templates and docuemnts
                   if(!(fileName.endsWith(".doc")) && !(fileName.endsWith(".dot"))) {
                        throw new IllegalArgumentException(
                             "The filename must end with the extensions \'.doc\' or \'.dot\'");
                   // Check that the file exists
                   File fileToPrint = new File(fileName);
                   if(!(fileToPrint.exists())) {
                        throw new FileNotFoundException("The file " +
                        fileName +
                        "cannot be found.");
                   // From the application, get an automation for the Documents property
                   documentsAutomation = this.getChildAutomation(this.wordAutomation,
                   "Documents");
                   // Get the ID of the Open method
                   id = documentsAutomation.getIDsOfNames(new String[]{"Open"});
                   if(id == null) {
                        throw new SWTException("It was not possible to recover an " +
                        "identifer for the Open method in WordSearchReplace.openFile().");
                   // Build an array of parameters - holds just the file name
                   arguments = new Variant[1];
                   arguments[0] = new Variant(fileName);
                   // Invoke the Open method on the Documents property
                   invokeResult = documentsAutomation.invoke(id[0], arguments);
                   // If the call to invoke the open method failed, throw an SWTException
                   // to terminate processing.
                   if(invokeResult == null) {
                        throw new SWTException("An error occurred whilst invoking the " +
                             "Open method for the following file: " +
                             fileName +
                             " in WordSearchReplace.openFile().");
                   // If it was possible to open the document successfully, grab an
                   // automation object referencing the active document here.               
                   else {
                        this.activeDocumentAutomation = this.getChildAutomation(
                             this.wordAutomation, "ActiveDocument");
              finally {
                   // If the automation was instantiated then dispose of it to
                   // release resources. This OleAutomation was only required
                   // to open the file and can safely be released here.
                   if(documentsAutomation != null) {
                        documentsAutomation.dispose();
         * Save the currently open file - the active document.
         * @throws SWTException if a problem occurs whilst invoking any of the OLE
         * methods.
         public void save() throws SWTException {
              int[] id = null;
              Variant invokeResult = null;
              // From the automation for the ActiveDocument object, get an id for
              // the Save method
              id = this.activeDocumentAutomation.getIDsOfNames(new String[]{"Save"});
              // If it was not possible to recover the id of the Save
              // method, throw an exception to notify the user and terminate
              // processing.
              if(id == null) {
                   throw new SWTException("Unable to obtain an automation for " +
                        "the Save method in WordSearchReplace.save().");
              // Invoke the Save method and catch the value returned
              invokeResult = this.activeDocumentAutomation.invoke(id[0]);
              // If a null value was returned then the invocation of the
              // Save method failed. Throw an exception to notify the
              // user and terminate processing.
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred invoking the " +
                        "Save method in WordSearchReplace.save().");
         * Save the active document using the name provided.
         * @param fileName Am instance of the String class encapsulating the name
         * for the file. Again, the path to and name of the file should
         * be supplied.
         * @throws NullPointerException if a null value is passed to the fileName
         * parameter.
         * @throws IllegalArgumentException if either an empty String is passed
         * to the fileName parameter or if the files name does not end
         * with one of the two permissible extensions - .dot and .doc
         public void saveAs(String fileName) throws SWTException,
         NullPointerException,
         IllegalArgumentException {
              int[] id = null;
              Variant[] arguments = null;
              Variant invokeResult = null;
              // If the fileName parameter is passed a null
              // value, throw an exception.
              if(fileName == null) {
                   throw new NullPointerException("A null value was passed to " +
                        "the fileName parameter of WordSearchReplace.saveAs().");
              // If the fileName parameter has been passed an empty String
              // then again throw an exception.
              if(fileName.length() == 0) {
                   throw new NullPointerException("An empty string was passed " +
                        "to the fileName parameter of WordSearchReplace.saveAs().");
              // Finally, make sure the file name ends in either
              // .doc or .dot.
              if((!fileName.endsWith(".dot")) && (!fileName.endsWith(".doc"))) {
                   throw new IllegalArgumentException("An illegal file name was " +
                        "passed to the fileName parameter of " +
                        "WordSearchReplace.saveAs(). The file name must " +
                        "end in \'.dot\' or \'.doc\'.");
              // From the automation for the ActiveDocument object, get an id for
              // the SaveAs method
              id = this.activeDocumentAutomation.getIDsOfNames(new String[]{"SaveAs"});
              // If it was not possible to recover the id of the SaveAs
              // method, throw an exception to notify the user and terminate
              // processing.
              if(id == null) {
                   throw new SWTException("Unable to obtain an automation for " +
                        "the SaveAs method in WordSearchReplace.saveAs().");
              // Build the array of arguments that will be passed to the invoke
              // method when the SaveAs method is invoked. In this case, this
              // array will contain a single member - a String object encapsulating
              // the path to and name of the output file.
              arguments = new Variant[1];
              arguments[0] = new Variant(fileName);
              // Invoke the SaveAs method and catch the value returned
              invokeResult = this.activeDocumentAutomation.invoke(id[0], arguments);
              // If a null value was returned then the invocation of the
              // PrintOut method failed. Throw an exception to notify the
              // user and terminate processing.
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred invoking the " +
                        "SaveAs method in WordSearchReplace.saveAs().");
         * Mimics Words 'replace' functionality by searching the active
         * document for evey string of characters that matches the value passed to
         * the searchTerm parameter and replacing them with the string of
         * characters passed to the replacementTerm method.
         * It is possible to code a VBA macro within Word that will perfrom a serach
         * and replace. That code would look like the following;
         * <pre>
         *      Selection.Find.ClearFormatting
    *     Selection.Find.Replacement.ClearFormatting
    *     With Selection.Find
    *      .Text = "serach"
    *      .Replacement.Text = "search"
    *      .Forward = True
    *      .Wrap = wdFindContinue
    *      .Format = False
    *      .MatchCase = False
    *      .MatchWholeWord = False
    *      .MatchWildcards = False
    *      .MatchSoundsLike = False
    *      .MatchAllWordForms = False
    *     End With
    *     Selection.Find.Execute Replace:=wdReplaceAll
    * <pre>
    * and this method will 'automate' it.
         * @param searchTerm An instance of the String class that will encapsulate
         * the series of characters that should be replaced.
         * @param replacementTerm An instance of the String class that will
         * encapsulate the series of characters that should replace the
         * searchTerm.
         * @throws NullPointerException if a null value is passed to either the
         * searchTerm or replacementTerm methods.
         * @throws SWTException if a problem occurs when invoking any of the
         * OLE methods.
         public void replace(String searchTerm,
         String replacementTerm) throws SWTException,
         NullPointerException {
              OleAutomation selectionFindAutomation = null;
              OleAutomation childAutomation = null;
              Variant[] arguments = null;
              Variant invokeResult = null;
              int[] id = null;
              int[] namedArguments = null;
              boolean success = true;
              // Validate the searchTerm parameter and throw exception if
              // null value passed.
              if(searchTerm == null) {
                   throw new NullPointerException("Null value passed to " +
                             "searchTerm parameter of the replace() method.");
              // Validate the replacementTerm parameter and throw exception if
              // null value passed.
              if(replacementTerm == null) {
                   throw new NullPointerException("Null value passed to " +
                             "replacementTerm parameter of the replace() method.");
              // Most of the VBA instructions used to perform the search and
              // replace functionality and child automations of Selection.Find,
              // therefore, it is wise to cache that automation first.
              // From the application, get an automation for the Selection property
              childAutomation = this.getChildAutomation(this.wordAutomation,
                   "Selection");
              selectionFindAutomation = this.getChildAutomation(childAutomation,
              "Find");
              // Next, using the cached automation, invoke the 'ClearFormatting'
              // method, validate the returned value and invoke the method.
              // Selection.Find.ClearFormatting
              id = selectionFindAutomation.getIDsOfNames(new String[]{"ClearFormatting"});
              if(id == null) {
                   throw new SWTException("It is not possible to recover an identifier " +
                        "for the ClearFormatting method in WordSearchReplace.replace() " +
                        "when clearing the formatting for the search string.");
              invokeResult = selectionFindAutomation.invoke(id[0]);
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred invoking the " +
                        "ClearFormatting method in WordSearchReplace.repace() " +
                        "when clearing formatting for the search string.");
              // Now, perform the same function but for the replacement string.
              // Selection.Find.Replacement.ClearFormatting
              childAutomation = this.getChildAutomation(selectionFindAutomation,
              "Replacement");
              id = childAutomation.getIDsOfNames(new String[]{"ClearFormatting"});
              if(id == null) {
                   throw new SWTException("It is not possible to recover an identifier " +
                        "for the ClearFormatting method in WordSearchReplace.replace() " +
                        "when clearing the formatting for the replacement string.");
              invokeResult = childAutomation.invoke(id[0]);
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred invoking the " +
                        "ClearFormatting method in WordSearchReplace.repace() " +
                        "when clearing formatting for the replacement string.");
              // Firstly, set the search text.
              // .Text = "search term"
              arguments = new Variant[1];
              arguments[0] = new Variant(searchTerm);
              success = this.setPropertyValue(selectionFindAutomation, "Text", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Text " +
                        "property for the search string in WordSearchReplace.replace().");
              // Next, the replacement text
              // .Replacement.Text = "replacement term"
              childAutomation = this.getChildAutomation(selectionFindAutomation,
              "Replacement");
              arguments[0] = new Variant(replacementTerm);
              success = this.setPropertyValue(childAutomation, "Text", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Text property" +
                        " for the replacement string in WordSearchReplace.replace().");
              // Set the direction of the search - forward in this case.
              // .Forward = True
              arguments[0] = new Variant(true);
              success = this.setPropertyValue(selectionFindAutomation, "Forward", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Forward " +
                        "property in WordSearchReplace.replace().");
              // Tell the search to wrap. Note the literal wdFindContinue relates to
              // a constant that is defined within Word. I have provided a static
              // final to replace it called WD_FIND_CONTINUE
              // .Wrap = wdFindContinue
              arguments[0] = new Variant(WordSearchReplace.WD_FIND_CONTINUE);
              success = this.setPropertyValue(selectionFindAutomation, "Wrap", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Wrap " +
                        "property in WordSearchReplace.replace().");
              // Set the Format property to False.
              // .Format = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "Format", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the Format " +
                        "property in WordSearchReplace.replace().");
              // Set the MatchCase property to false.
              // .MatchCase = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchCase", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the MatchCase " +
                        "property in WordSearchReplace.replace().");
              // Set the MatchWholeWord property to false.
              // .MatchWholeWord = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchWholeWord", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the " +
                        "MatchWholeWord property in WordSearchReplace.replace().");
              // Set the MatchWildCards property to false.
              // .MatchWildcards = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchWildCards", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the " +
                        "MatchWildCards property in WordSearchReplace.replace().");
              // Set the MatchSoundsLike property to false.
              // .MatchSoundsLike = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchSoundsLike", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the " +
                        "MatchSoundsLike property in WordSearchReplace.replace().");
              // Set the MatchAllWordForms property to false.
              // .MatchAllWordForms = False
              arguments[0] = new Variant(false);
              success = this.setPropertyValue(selectionFindAutomation, "MatchAllWordForms", arguments);
              if(!success) {
                   throw new SWTException("A problem occurred setting the " +
                        "MatchAllWordForms property in WordSearchReplace.replace().");
              // Invoke the Execute command passing the correct value to the Replace
              // parameter. Again, wdReplaceAll is a constant that I have provided
              // a ststic final for called WD_REPLACE_ALL
              // Selection.Find.Execute Replace:=wdReplaceAll
              id = selectionFindAutomation.getIDsOfNames(new String[]{"Execute", "Replace"});
              if(id == null) {
                   throw new SWTException("It was not possible to recover an identifier " +
                        "for the Execute method in WordSearchReplace.replace().");
              arguments = new Variant[1];
              arguments[0] = new Variant(WordSearchReplace.WD_REPLACE_ALL);
              namedArguments = new int[1];
              namedArguments[0] = id[1];
              // There was some indication that the invokeNoReply method should
              // be used when making this call but no, invoke SEEMS to work well
              //selectionFindAutomation.invokeNoReply(id[0], arguments, namedArguments);
              invokeResult = selectionFindAutomation.invoke(id[0], arguments, namedArguments);
              if(invokeResult == null) {
                   throw new SWTException("A problem occurred trying to invoke the " +
                   "Execute method in WordSearchReplace.replace().");
         * Close the active document.
         * @throws SWTException if a problem is encountered invoking any of the
         * OLE methods.
         public void closeFile() throws SWTException {
              int[] id = null;
              Variant[] arguments = null;
              Variant invokeResult = null;
              try {
                   // From the OleAutomation referencing the active document, recover
                   // the id of the Close method.
                   id = this.activeDocumentAutomation.getIDsOfNames(new String[]{"Close"});
                   // If it was not possible to recover the id of the Close
                   // method then throw an exception to notify the user and
                   // terminate processing.
                   if(id == null) {
                        throw new SWTException("It was not possible to recover an " +
                             "identifier for the Close method in " +
                             "WordSearchReplace.closeFile().");
                   // Invoke the Close method on the ActiveDocument automation
                   invokeResult = this.activeDocumentAutomation.invoke(id[0]);
                   // If the invocation of the Close method failed, throw an
                   // exception to notify the user and terminate processing.
                   if(invokeResult == null) {
                        throw new SWTException(
                             "An error occurred invoking the Close method in " +
                             "WordSearchReplace.closeFile().");
              finally {
                   if(this.activeDocumentAutomation != null) {
                        this.activeDocumentAutomation.dispose();
         * Release resources.
         public void dispose() throws SWTException {
              try {
                   // Set the cleaned flag to true. This prevents the method from
                   // running again if it is called from the finalize() method
                   this.cleaned = true;
                   // From the word automation, recover the id of the Quit method
                   int[] id = this.wordAutomation.getIDsOfNames(new String[]{"Quit"});
                   // If the id of the Quit method cannot be recovered
                   // throw an exception - not much good really though.
                   if(id == null) {
                        throw new SWTException("Unable to obtain an id for the Quit " +
                             "property in WordSearchReplace.dispose().");
                   // Invoke Quit
              Variant result = this.wordAutomation.invoke(id[0]);
              // If an error occurs during the invocation, throw an exception.
              // Again though that exception is of limited value.
              if(result == null) {
                   throw new SWTException("A problem occurred trying to invoke the " +
                        "Quit method in WordSearchReplace.dispose().");
         finally {
              // Finally, dispose of the word application automation.
              this.wordAutomation.dispose();
         * The finalize() method has been over-ridden to ensure that resources
         * are correctly released if a WordSearchReplace object is created but
         * not disposed of properly before it becomes eligible for garbage
         * collection. The cleaned flag is used as acheck to ensure that the
         * dispose() method cannot be called more than once.
         public void finalize() throws Throwable {
              if(!this.cleaned) {
                   this.dispose();
         * Creates and returns a 'child' OleAutomation object. The object model
         * employed by Word, Excel and the like, arrange objects, methods and
         * properties hierarchically. To invoke a method, it is often necessary
         * to iterate through this hierarchy from parent to child and this method
         * supports that process.
         * @param automation An OleAutomation object that references the parent
         * automation.
         * @param childName An instance of the String class that encapsulates the
         * name of the child automation.
         * @throws SWTException if a problem is encountered invoking one or
         * other of the OLE methods.
         private OleAutomation getChildAutomation(OleAutomation automation,
         String childName) throws SWTException {
              // Try to recove the unique identifier for the child automation
              int[] id = automation.getIDsOfNames(new String[]{childName});
              // If the identifier cannot be found then throw an exception to
              // terminate processing.           
              if (id == null) {
                   throw new SWTException(
                        "A problem occurred trying to obtain and id for: " +
                   childName +
                   "in the getC

    When you call it the first time, it new Shell() constructs a new Display for you (the default).
    The second time, it gets the default display, but you are in a different Thread now. Since you have to create your widgets in the UI thread, it gives you that error.
    To run code in the UI thread, Display provides two methods:
    display.syncexec(..)and
    display.asyncexec(...)see
    http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/swt_threading.htm
    for more details.

  • Org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException)

    I started up FB 4 today and got this error in my log:
    Any ideas good friends?
    !SESSION 2009-10-28 12:33:26.601 -----------------------------------------------
    eclipse.buildId=unknown
    java.version=1.6.0_16
    java.vendor=Sun Microsystems Inc.
    BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
    Command-line arguments:  -os win32 -ws win32 -arch x86 -clean -data H:\My Documents\Flash Builder 4 -clean
    !ENTRY org.eclipse.update.configurator 4 0 2009-10-28 12:33:30.367
    !MESSAGE Unable to find feature.xml in directory: C:\Program Files\Adobe\Adobe Flash Builder Beta 2\features\com.adobe.ide.coldfusion.feature_1.0.0.253229-8LAqPgroE9KlmfZZdDcADiNC
    !ENTRY org.eclipse.ui 4 0 2009-10-28 12:34:13.745
    !MESSAGE Unhandled event loop exception
    !STACK 0
    org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException)
        at org.eclipse.swt.SWT.error(SWT.java:3777)
        at org.eclipse.swt.SWT.error(SWT.java:3695)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:136)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3800)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3425)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
        at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at com.adobe.flexbuilder.standalone.FlexBuilderApplication.start(FlexBuilderApplication.java :99)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLau ncher.java:110)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.jav a:79)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
    Caused by: java.lang.NullPointerException
        at org.eclipse.eclipsemonkey.actions.RecreateMonkeyMenuAction.createTheMenu(RecreateMonkeyMe nuAction.java:118)
        at org.eclipse.eclipsemonkey.actions.RecreateMonkeyMenuAction.run(RecreateMonkeyMenuAction.j ava:71)
        at org.eclipse.eclipsemonkey.UpdateMonkeyActionsResourceChangeListener$2.run(UpdateMonkeyAct ionsResourceChangeListener.java:256)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133)
        ... 22 more
    !SESSION 2009-10-29 09:05:49.373 -----------------------------------------------
    eclipse.buildId=unknown

    I went and deleted my metadata folder it FB4 stared ok _

  • Org.eclipse.swt.SWTException: Widget is disposed

    Hello ,
    I am using SWT for creating UI , I am written following code for creating pop up window
    Button ok = componentsRenderer.createButtonWidget(versionTreeComponentsShell, SWT.PUSH,
                        PropertyClass.getPropertyLabel(QTLConstants.OK_BUTTON));
              Button cancel = componentsRenderer.createButtonWidget(versionTreeComponentsShell, SWT.PUSH,
                        PropertyClass.getPropertyLabel(QTLConstants.CANCEL_BUTTON));
              ok.addSelectionListener(new SelectionAdapter() {
              @Override
                   public void widgetSelected(SelectionEvent e) {
                   StringBuffer sbDefaultVersionSplitter = new StringBuffer();
                   String defaultVersionSplitterSelected = "";
                        if(versionSplitterCheckBoxList.size() > 0){
                             String[] defaultVersionSplitters = PropertyClass.getPropertyLabel(QTLConstants.VERSIONING_ASSISTENT_PAGE_SPLLITER).split(QTLConstants.MULTIPLE_EXTENSIONS_SPLITER);
                             for(Button cbButton : versionSplitterCheckBoxList){
                                  if(cbButton.getSelection() && !cbButton.getText().equalsIgnoreCase(defaultVersionSplitters[3])){
                                       // check is added for version number string equal to "<fileName><number>" i.e splitter is not present
                                       if(!cbButton.getText().equalsIgnoreCase(defaultVersionSplitters[2])){
                                            String tempVersionStringWithSplitter = cbButton.getText().substring(cbButton.getText().indexOf("_")+1,cbButton.getText().length());                                   
                                            String selectedSplitter = tempVersionStringWithSplitter.substring(0,tempVersionStringWithSplitter.indexOf("<"));                              
                                            sbDefaultVersionSplitter.append(selectedSplitter);
                                            sbDefaultVersionSplitter.append("|");
                             }//end of for loop
                             if(customVersionSplitterText.isEnabled() && customVersionSplitterText.getCharCount() > 0){
                                  sbDefaultVersionSplitter.append(customVersionSplitterText.getText());
                                  defaultVersionSplitterSelected = sbDefaultVersionSplitter.toString();
                             } else if(sbDefaultVersionSplitter.length() > 0 && (!customVersionSplitterText.isEnabled() || customVersionSplitterText.getCharCount() == 0)){
                                  defaultVersionSplitterSelected = sbDefaultVersionSplitter.toString().substring(0, sbDefaultVersionSplitter.length()-2);
                        }//end of if loop
                        dataBean.setVersionSplitterSelected(defaultVersionSplitterSelected);                    
                        versionTreeComponentsShell.close();     
              cancel.addSelectionListener(new SelectionAdapter() {
                   @Override
                   public void widgetSelected(SelectionEvent e) {               
                        versionTreeComponentsShell.setVisible(false);                    
    when i am clicking multiple time on "OK" button i am getting following error
    org.eclipse.swt.SWTException: Widget is disposed
         at org.eclipse.swt.SWT.error(SWT.java:4361)
         at org.eclipse.swt.SWT.error(SWT.java:4276)
         at org.eclipse.swt.SWT.error(SWT.java:4247)
         at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
         at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
         at org.eclipse.swt.widgets.Button.getSelection(Button.java:721)
         at com.impact.qtl12.imports.UI.CSVWizard.FileInputPage$10.widgetSelected(FileInputPage.java:784)
         at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
         at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
         at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
         at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
         at org.eclipse.jface.window.Window.open(Window.java:801)
         at com.impact.qtl12.imports.UI.CSVFile.QTL$4.widgetSelected(QTL.java:427)
         at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
         at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
         at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
         at com.impact.qtl12.imports.UI.CSVFile.QTL.createShell(QTL.java:767)
         at com.impact.qtl12.imports.UI.CSVFile.QTL.launch(QTL.java:826)
         at com.impact.qtl12.imports.UI.CSVFile.QTL.main(QTL.java:847)
    whats solution for this ?
    Regards

    You can try asking third party API questions here, but you'll likely be waiting a long time. You are better off looking for a forum that is specifically for your third party technology; in this case I would look around on the Eclipse website since its their tech.

  • SWT:::INVALID THREAD ACCESS

    When im tryin to call a method from sum other class .
    It throws
    org.eclipse.swt.SWTException: Invalid thread access
    i know this has to do with ui threadsand we have to wrap the display by SyncEXec......
    but im not able to do it,,,
    can ne1 help??

    org.eclipse.swt.widgets.Display.asyncExec(new Runnable() {
       public void run() {
         // do your stuff here
    });if only they'd document these things, eh. it's not like it's all there in the help menu, either.....

  • Invalid thread access

    This morning when I opened Flex Builder it fails to open any
    of the files mxml or as for editing and instead gives me the
    following error:-
    Reason for the failure: "Invalid thread access"
    On checking the details it has the following exception in
    there, please advise.
    org.eclipse.swt.SWTException: Invalid thread access

    any advice?

  • [solved]Subclipse error: invalid thread access

    im still trying to get eclipse with subclipse work. I get to connect to the svn server when importing a project, then after a user and password prompt eclipse tries to check it out as a new project, but then eclipse shuts down.
    After a restart of eclipse nothing had happended. Now if i try it again there is an error message: could not connect to server: invalid thread access.
    Any solutions?
    Last edited by jrs (2009-12-05 10:28:52)

    tsvensson wrote:
    More about the issue here:
    http://subclipse.tigris.org/wiki/JavaHL … 1d77d95b32
    There is currently a bug in the new support for GNOME keyring in Subversion 1.6. It works OK when using the command line,
    but not when other users of the libraries use it. Until this is fixed, you can workaround the problem by turning off this feature.
    To do this, open the file ~/.subversion/config and add the following:
    [auth]
    ### Set password stores used by Subversion. They should be
    ### delimited by spaces or commas. The order of values determines
    ### the order in which password stores are used.
    ### Valid password stores:
    ###   gnome-keyring        (Unix-like systems)
    ###   kwallet              (Unix-like systems)
    ###   keychain             (Mac OS X)
    ###   windows-cryptoapi    (Windows)
    password-stores =
    The empty value for "password-stores" disables the feature. Passwords will be stored in plain text in the auth folder as with all previous version of Subversion.
    This work for me, but I have svn version 1.6.6 , I have changed the file as below:
    ### Section for authentication and authorization customizations.
    [auth]
    ### Set store-passwords to 'no' to avoid storing passwords in the
    ### auth/ area of your config directory. It defaults to 'yes'.
    ### Note that this option only prevents saving of *new* passwords;
    ### it doesn't invalidate existing passwords. (To do that, remove
    ### the cache files by hand as described in the Subversion book.)
    store-passwords = no
    ### Set store-auth-creds to 'no' to avoid storing any subversion
    ### credentials in the auth/ area of your config directory.
    ### It defaults to 'yes'. Note that this option only prevents
    ### saving of *new* credentials; it doesn't invalidate existing
    ### caches. (To do that, remove the cache files by hand.)
    store-auth-creds = no

  • [OSB] "Invalid Thread Access" - Consuming WSDL

    Creating a business service I am trying to define the service type by consuming WSDL. I get the error "Invalid Thread Access" with no additional details.
    The URI is accessable in my browser and works when i import it into jdeveloper.
    Working on Oracle Linux in Eclipse OSB
    Any help would be great.
    Thanks,
    Nick

    Thank you Vlad, I want to tell you some thing about this WSDL.
    Size of the wsdl :    5.60 MB and It has 93,671 lines of coding in that file.   Is it causes problem
    or
    Am invoking CRM Web Service and they clearly mention in my mail that "Please use HTTPS because SSL has been applied to your sites" 
    do I need to create key store for their Certificates.
    Please Advise me.
    Thanks,
    Viswas

  • "Invalid Thread Access" - Consuming WSDL in OSB

    Hi,
    Creating a business service I am trying to define the service type by consuming WSDL. I get the error "Invalid Thread Access" with no additional details.
    The URI is accessible in my browser and works when i import it into jdeveloper. through soapUI, I can able to test this service.
    The interesting point here is I am not able to ping that server. (cmd-->ping service name). Here my doubt is do they(as Am invoking third party service) need to open any port for us or not.
    Please advice me
    Thanks,

    Thank you Vlad, I want to tell you some thing about this WSDL.
    Size of the wsdl :    5.60 MB and It has 93,671 lines of coding in that file.   Is it causes problem
    or
    Am invoking CRM Web Service and they clearly mention in my mail that "Please use HTTPS because SSL has been applied to your sites" 
    do I need to create key store for their Certificates.
    Please Advise me.
    Thanks,
    Viswas

  • Jar file of org.eclipse.swt.ole.win32.OLE

    Hi,
    Can anyone provide me the jar file for org.eclipse.swt.ole.win32.OLE.
    or can let me know where I will get it..
    Thanks in advanced,
    Sang

    hello ritu...
    you would require standard-1.1.2.jar .....
    try with that....
    u can download it from -
    http://www.java2s.com/Code/Jar/CatalogJar.htm
    classes contained in standard-1.1.2.jar -
    org.apache.taglibs.standard.tag.el.core.OutTag.class
    org.apache.taglibs.standard.tag.el.core.ParamTag.class
    org.apache.taglibs.standard.tag.el.core.RedirectTag.class
    org.apache.taglibs.standard.tag.el.core.SetTag.class
    org.apache.taglibs.standard.tag.el.core.UrlTag.class
    org.apache.taglibs.standard.tag.el.core.WhenTag.class
    org.apache.taglibs.standard.tag.el.fmt.BundleTag.class
    org.apache.taglibs.standard.tag.el.fmt.FormatDateTag.class
    org.apache.taglibs.standard.tag.el.fmt.FormatNumberTag.class
    regards
    vamsi

  • Thread Safety: Invalid Tread Access

    Hello everyone, I'm somewhat stuck in a rut and would appreciate any advice I could get on this problem I'm having. It's a relatively large system but I'll try and be succinct.
    There are two classes in question.
    The first one buids an (SWT) interface, this interface contains a Tree object.
    The second class (traverses a parse tree and) needs to add a TreeItem to the Tree in the first class.
    public class SomeApp extends ApplicationWindow {
         private static Tree tree;
         private Composite composite;
           public SomeApp(Shell parentShell)
                super(parentShell);
                     addMenuBar();
                      addStatusLine();
                    addToolBar(SWT.FLAT);
           public static void main(String[] args) {
                ApplicationWindow viewer = new SomeApp(null);
                      viewer.setBlockOnOpen(true);
                       viewer.open();
           protected Control createContents(Composite parent) {
                getShell().setText("An Application");
                setStatus("Ready");
                composite = new Composite(getShell(), SWT.NONE);
                tree = new Tree(composite, SWT.NONE);
                    try {
                            AnotherClass someClass = new AnotherClass()
                   someClass.addTreeItem()
              } catch (Exception e) {
                   System.out.println("Error:  "+e.getMessage());
              return composite;
    public class AnotherClass
    public AnotherClass(){};
           public void addTreeItem() {
                  try {
                        TreeItem ti = new TreeItem(SomeApp.tree,0);
                        ti.setText("Any old text");
                  catch (Exception e) {
                   System.out.println("Error2:  "+e.getMessage());
              }"Error2: Invalid thread access" is the error message being spat out.
    If anyone could point out which methods/objects need to be static and/or code needs to be synchronised, or any way to make the class/object thread safe I'd be extremely greatful thanks.

    I've resolved this issue thanks.
    "Applications that wish to call UI code from a non-UI thread must provide a Runnable that calls the UI code."
    http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/swt_threading.htm

  • Org.eclipse.core.runtime.CoreException

    Hi ,
    while publishing appication throrugh weblogic10.3 workshop i am getting below error.Please help me in this regard.
    Thanks
    Narasimha sastry
    org.eclipse.core.runtime.CoreException: This launch configuration is invalid and may be out of sync with the workspace
    at org.eclipse.wst.server.ui.internal.actions.RunOnServerLaunchConfigurationDelegate.launch(RunOnServerLaunchConfigurationDelegate.java:87)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:759)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:608)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:601)
    at org.eclipse.wst.server.ui.internal.actions.RunOnServerActionDelegate.run(RunOnServerActionDelegate.java:328)
    at org.eclipse.wst.server.ui.internal.actions.RunOnServerActionDelegate.run(RunOnServerActionDelegate.java:659)
    at org.eclipse.wst.server.ui.internal.ServerLaunchShortcut.launch(ServerLaunchShortcut.java:39)
    at org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension.launch(LaunchShortcutExtension.java:429)
    at org.eclipse.debug.internal.ui.actions.LaunchShortcutAction.run(LaunchShortcutAction.java:66)
    at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:546)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490)
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3687)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3298)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
    at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
    at org.eclipse.equinox.launcher.Main.eclipse_main(Main.java:1148)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.m7.installer.util.NitroxMain$1.run(NitroxMain.java:33)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

    Hi Narasimha,
    Can you put the workshop log file here
    I feel that there is problem in the annotation-manifest.xml
    please check it again.
    Regards,
    Kal.

  • Org.eclipse.core.runtime.CoreException: Text editor does not have a documen

    Hi all,
    strangely on most hprof-files while opening them as snapshot
    I get a org.eclipse.core.runtime.CoreException (see below the stack trace).
    This happens indipendently if launching MemoryAnalyzer as standalone (MemoryAnalyzer.sh)
    or within my Eclipse SDK platform (Version: 3.3.2).
    It seems to depend of the hprof-files itself, if the error raises or not.
    For example the HeapDumpSamples from the snapshots dir are not affect to this problem,
    maybe the size of the dumpfile is deterministic ? Any help or hint is welcome, thanks.
    org.eclipse.core.runtime.CoreException: Text editor does not have a document provider
         at org.eclipse.ui.texteditor.AbstractTextEditor.doSetInput(AbstractTextEditor.java:3947)
         at org.eclipse.ui.texteditor.StatusTextEditor.doSetInput(StatusTextEditor.java:190)
         at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.doSetInput(AbstractDecoratedTextEditor.java:1225)
         at org.eclipse.ui.editors.text.TextEditor.doSetInput(TextEditor.java:168)
         at org.eclipse.ui.texteditor.AbstractTextEditor$19.run(AbstractTextEditor.java:3003)
         at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:369)
         at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:313)
         at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:758)
         at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
         at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:755)
         at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2451)
         at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3021)
         at org.eclipse.ui.texteditor.AbstractTextEditor.init(AbstractTextEditor.java:3048)
         at org.eclipse.ui.internal.EditorManager.createSite(EditorManager.java:794)
         at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:643)
         at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:426)
         at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:592)
         at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:263)
         at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2739)
         at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2651)
         at org.eclipse.ui.internal.WorkbenchPage.access$13(WorkbenchPage.java:2643)
         at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2595)
         at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
         at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2590)
         at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2574)
         at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2557)
         at com.sap.tools.memory.ui.core.actions.OpenSnapshotAction$1.visit(OpenSnapshotAction.java:68)
         at com.sap.tools.memory.ui.core.actions.OpenSnapshot$Visitor.go(OpenSnapshot.java:78)
         at com.sap.tools.memory.ui.core.actions.OpenSnapshotAction.run(OpenSnapshotAction.java:57)
         at com.sap.tools.memory.ui.core.actions.OpenSnapshotAction.run(OpenSnapshotAction.java:52)
         at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:256)
         at org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:229)
         at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:546)
         at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490)
         at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402)
         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1101)
         at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3319)
         at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2971)
         at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
         at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
         at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
         at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
         at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
         at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
         at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
         at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
         at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
         at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
         at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
         at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
         at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    Hi Guenther,
    I have a guess...
    The Memory Analyzer is implemented as an Eclipse editor. That means, Eclipse decides based on the extension what editor to open. We have registered the editor for the hprof extension.
    Sometimes, heap dumps end with the timestamp, like java_pid282.hprof.200804031745. If you use "Open Heap Dump" then we will try to rename the file. If you use "Open File", it will try to open the heap dump with the default editor as it doesn't know the 200804xxx extension. The default editor is the text editor and that will not work. So the work-around is renaming the file.
    Kind regards,
      - Andreas.

  • Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbenc

    I get error when using jsp editor,
    I have debugged as what is causing the error
    and
    I found out that when I use jstl
    <c:forEach var="anything" varStatus="index">
    *${index.count}*
    </c:forEach>
    The code ${index.count} is causing the follwoing error
    !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".
    !STACK 0
    java.lang.NullPointerException
         at oracle.eclipse.tools.common.services.ui.refactor.internal.ArtifactRefactoringEnablementTester.hasArtifactDefinitionAtOffset(ArtifactRefactoringEnablementTester.java:73)
         at oracle.eclipse.tools.common.services.ui.refactor.internal.ArtifactRefactoringEnablementTester.test(ArtifactRefactoringEnablementTester.java:60)
         at org.eclipse.core.internal.expressions.Property.test(Property.java:58)
         at org.eclipse.core.internal.expressions.TestExpression.evaluate(TestExpression.java:99)
         at org.eclipse.core.internal.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:53)
         at org.eclipse.core.internal.expressions.WithExpression.evaluate(WithExpression.java:72)
         at org.eclipse.ui.internal.services.EvaluationResultCache.evaluate(EvaluationResultCache.java:74)
         at org.eclipse.ui.internal.services.ExpressionAuthority.evaluate(ExpressionAuthority.java:165)
         at org.eclipse.ui.internal.services.EvaluationAuthority.addEvaluationListener(EvaluationAuthority.java:79)
         at org.eclipse.ui.internal.services.EvaluationService.addEvaluationListener(EvaluationService.java:47)
         at org.eclipse.ui.internal.menus.WorkbenchMenuService.registerVisibleWhen(WorkbenchMenuService.java:884)
         at org.eclipse.ui.internal.menus.ContributionRoot.addContributionItem(ContributionRoot.java:60)
         at org.eclipse.ui.internal.menus.MenuAdditionCacheEntry.createContributionItems(MenuAdditionCacheEntry.java:188)
         at org.eclipse.ui.internal.menus.WorkbenchMenuService$5.run(WorkbenchMenuService.java:584)
         at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
         at org.eclipse.ui.internal.menus.WorkbenchMenuService.processAdditions(WorkbenchMenuService.java:656)
         at org.eclipse.ui.internal.menus.WorkbenchMenuService.addContributionsToManager(WorkbenchMenuService.java:744)
         at org.eclipse.ui.internal.menus.WorkbenchMenuService.populateContributionManager(WorkbenchMenuService.java:730)
         at org.eclipse.ui.internal.menus.WorkbenchMenuService.addContributionsToManager(WorkbenchMenuService.java:782)
         at org.eclipse.ui.internal.menus.WorkbenchMenuService.populateContributionManager(WorkbenchMenuService.java:730)
         at org.eclipse.ui.internal.menus.SlaveMenuService.populateContributionManager(SlaveMenuService.java:203)
         at org.eclipse.ui.internal.menus.SlaveMenuService.populateContributionManager(SlaveMenuService.java:76)
         at org.eclipse.ui.internal.PopupMenuExtender.addMenuContributions(PopupMenuExtender.java:357)
         at org.eclipse.ui.internal.PopupMenuExtender.menuAboutToShow(PopupMenuExtender.java:335)
         at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:342)
         at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:473)
         at org.eclipse.jface.action.MenuManager.access$1(MenuManager.java:469)
         at org.eclipse.jface.action.MenuManager$2.menuShown(MenuManager.java:495)
         at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:247)
         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1058)
         at org.eclipse.swt.widgets.Control.WM_INITMENUPOPUP(Control.java:4881)
         at org.eclipse.swt.widgets.Control.windowProc(Control.java:4557)
         at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
         at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1610)
         at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2061)
         at org.eclipse.swt.widgets.Display.windowProc(Display.java:4972)
         at org.eclipse.swt.internal.win32.OS.TrackPopupMenu(Native Method)
         at org.eclipse.swt.widgets.Menu._setVisible(Menu.java:256)
         at org.eclipse.swt.widgets.Display.runPopups(Display.java:4206)
         at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3748)
         at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
         at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
         at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
         at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
         at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
         at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
         at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
         at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
         at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
         at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
         at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
         at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
         at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
         at java.lang.reflect.Method.invoke(Unknown Source)
         at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
         at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
         at org.eclipse.equinox.launcher.Main.run(Main.java:1410)

    Thanks for the post. This issue was noted recently, a bug was logged, and a fix has been made that will be part of the upcoming release of OEPE. Appreciate your support in reporting this issue.
    Kind regards,
    Carlin

  • Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".

    Hi experts,
    We are tryign to configure the server via sap as java in nwds 7.3 , and im getting the error as shown , not able to add the server  to my nwds .
    Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".
    java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
    at com.sap.sapmc.preference.Activator$2.propertyChange(Activator.java:107)
    at org.eclipse.ui.preferences.ScopedPreferenceStore$3.run(ScopedPreferenceStore.java:375)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.ui.preferences.ScopedPreferenceStore.firePropertyChangeEvent(ScopedPreferenceStore.java:372)
    at org.eclipse.ui.preferences.ScopedPreferenceStore.setValue(ScopedPreferenceStore.java:813)
    at com.sap.sapmc.preference.PreferencePageStorage.store(PreferencePageStorage.java:241)
    at com.sap.sapmc.preference.SAPSystemsPreferencePage.performOk(SAPSystemsPreferencePage.java:356)
    at org.eclipse.jface.preference.PreferenceDialog$13.run(PreferenceDialog.java:964)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.runtime.Platform.run(Platform.java:888)
    at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:48)
    at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
    at org.eclipse.jface.preference.PreferenceDialog.okPressed(PreferenceDialog.java:944)
    at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.okPressed(FilteredPreferenceDialog.java:453)
    at org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog.okPressed(WorkbenchPreferenceDialog.java:169)
    at org.eclipse.jface.preference.PreferenceDialog.buttonPressed(PreferenceDialog.java:233)
    at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
    at org.eclipse.jface.window.Window.open(Window.java:801)
    at org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog.open(WorkbenchPreferenceDialog.java:211)
    at org.eclipse.ui.internal.OpenPreferencesAction.run(OpenPreferencesAction.java:65)
    at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
    Regards
    Govardan

    Hi Govardan,
    does this help to you?
    See the topmost entry at
    NWDS Troubleshooting - Java Development - SCN Wiki
    Regards,
    Ervin

Maybe you are looking for