⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 powerpointtest.java

📁 java与windows的com桥,可以用来操作所有的com程序如word或者excel等
💻 JAVA
字号:
package com.jacob.test.powerpoint;

/** 
 * $Id$ 
 * 
 * This is really more of a multi threaded tester 
 * <p>
 * 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.
 */
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComFailException;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.test.BaseTestCase;

/**
 * 
 * power point test program posted to sourceforge to demonstrate memory problem.
 * The submitter stated they had the problem on windows 2000 with office 2000 I
 * have been unable to duplicate on windows XP with office 2003. I am comitting
 * this to the tree just in case we need to come back to it.
 * <P>
 * This relies on BaseTestCase to provide the root path to the file under test
 * <p>
 * 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 PowerpointTest extends BaseTestCase {
	private static final int NUM_THREADS = 5;
	protected static final int NUM_ITERATIONS = 50;

	/**
	 * main program that lets us run this as a test
	 * 
	 * @param args
	 */
	public void testPowerpoint() {
		ComThread.InitMTA();

		ActiveXComponent component = new ActiveXComponent(
				"Powerpoint.Application");
		Dispatch comPowerpoint = component.getObject();

		try {
			PowerpointTestThread[] threads = new PowerpointTestThread[NUM_THREADS];
			for (int i = 0; i < NUM_THREADS; i++) {
				threads[i] = new PowerpointTestThread(i + 1, comPowerpoint);
				threads[i].start();
			}

			boolean allThreadsFinished = false;
			while (!allThreadsFinished) {
				allThreadsFinished = true;
				for (int i = 0; i < NUM_THREADS; i++) {
					if (threads[i].isAlive()) {
						allThreadsFinished = false;
						break;
					}
				}
				if (!allThreadsFinished) {
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						// no op
					}
				}
			}

			Dispatch.call(comPowerpoint, "Quit");
			for (int i = 0; i < NUM_THREADS; i++) {
				if (threads[i].threadFailedWithException != null) {
					fail("caught unexpected exception in thread "
							+ threads[i].threadFailedWithException);
				}
			}
		} finally {
			ComThread.Release();
		}

	}

	/**
	 * the thread class that runs power point
	 */
	public class PowerpointTestThread extends Thread {
		/**
		 * holds any caught exception so the main/test case can see them
		 */
		public Throwable threadFailedWithException = null;

		private int threadID;
		private Dispatch comPowerpoint;

		/**
		 * thread constructor
		 * 
		 * @param threadID
		 * @param comPowerpoint
		 */
		public PowerpointTestThread(int threadID, Dispatch comPowerpoint) {
			super("TestThread " + threadID);
			this.threadID = threadID;
			this.comPowerpoint = comPowerpoint;
		}

		public void run() {
			System.out.println("Thread \"" + Thread.currentThread().getName()
					+ "\" started");
			System.out.flush();
			ComThread.InitMTA();
			try {
				for (int i = 0; i < NUM_ITERATIONS; i++) {
					if (i % 10 == 0) {
						System.out.println(Thread.currentThread().getName()
								+ ": Iteration " + i);
						System.out.flush();
					}
					Dispatch comPresentations = Dispatch.get(comPowerpoint,
							"Presentations").toDispatch();
					Dispatch comPresentation = Dispatch.call(
							comPresentations,
							"Open",
							getWindowsFilePathToPackageResource("test"
									+ threadID + ".ppt", this.getClass()),
							new Integer(0), new Integer(0), new Integer(0))
							.toDispatch();
					Dispatch.call(comPresentation, "Close");
				}
			} catch (ComFailException cfe) {
				threadFailedWithException = cfe;
				System.err.println(Thread.currentThread().getName()
						+ "\" while working on: "
						+ getWindowsFilePathToPackageResource("test" + threadID
								+ ".ppt", this.getClass()));
				cfe.printStackTrace();
			} catch (Exception e) {
				threadFailedWithException = e;
				System.err.println("Error in Thread \""
						+ Thread.currentThread().getName() + "\":");
				e.printStackTrace();
			} finally {
				ComThread.Release();
				System.out.println("Thread \""
						+ Thread.currentThread().getName() + "\" finished");
				System.out.flush();
			}
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -