package com.jacob.test.vbscript; import com.jacob.com.*; import com.jacob.test.BaseTestCase; import com.jacob.activeX.*; /** * Here we create the ScriptControl component in a separate MTA thread and then * call the Eval method from the main thread. The main thread must also be an * MTA thread. If you try to create it as an STA then you will not be able to * make calls into a component running in another thread. *
* May need to run with some command line options (including from inside Eclipse). * Look in the docs area at the Jacob usage document for command line options. */ public class ScriptTest3 extends BaseTestCase { public static ActiveXComponent sC; public static DispatchEvents de = null; public static Dispatch sControl = null; public static boolean quit = false; public void testScript() { try { ComThread.InitMTA(); ScriptTest3Inner script = new ScriptTest3Inner(); script.start(); try { Thread.sleep(1000); } catch (InterruptedException ie){ // should we get this? } Variant result = Dispatch.call(sControl, "Eval", getSampleVPScriptForEval()); System.out.println("eval(" + getSampleVPScriptForEval() + ") = " + result); System.out.println("setting quit"); ScriptTest3.quit = true; } catch (ComException e) { e.printStackTrace(); fail("Caught excpetion running script with MTA"); } finally { System.out.println("main done"); ComThread.Release(); } } class ScriptTest3Inner extends Thread { public void run() { try { ComThread.InitMTA(); System.out.println("OnInit"); String lang = "VBScript"; sC = new ActiveXComponent("ScriptControl"); sControl = (Dispatch) sC.getObject(); Dispatch.put(sControl, "Language", lang); ScriptTestErrEvents te = new ScriptTestErrEvents(); de = new DispatchEvents(sControl, te); System.out.println("sControl=" + sControl); while (!quit) sleep(100); ComThread.Release(); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("worker thread exits"); } } } }