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

📄 dllfromjarclassloader.java

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

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import com.jacob.com.LibraryLoader;

/**
 * It is sometimes necessary to run Jacob without being able to install the dll
 * on the client machine. This is true in JavaWebStart (JWS) and possibly Applet
 * (assuming security allows access to the file system). The obvious thing to do
 * here is to jar up the Jacob.dll so that it can be downloaded the client along
 * with the rest of the resources. This is simple except that the System.Load()
 * function does not search jar files for DLLs. It searches the classpath. The
 * work around to this problem is to write the DLL to a temporary file and then
 * explicitly load the DLL calling passing the full path to the temporary file.
 * 
 * The following code demonstrates this idea.
 * 
 * @author joe
 * 
 */
public class DLLFromJARClassLoader {

	/**
	 * Load the DLL from the classpath rather than from the java path. This code
	 * uses this class's class loader to find the dell in one of the jar files
	 * in this class's class path. It then writes the file as a temp file and
	 * calls Load() on the temp file. The temporary file is marked to be deleted
	 * on exit so the dll is deleted from the system when the application exits.
	 * <p>
	 * Derived from ample code found in Sun's java forums <p.
	 * 
	 * @return true if the native library has loaded, false if there was a
	 *         problem.
	 */
	public boolean loadLibrary() {
		try {
			// this assumes that the dll is in the root dir of the signed
			// jws jar file for this application.
			//
			// Starting in 1.14M6, the dll is named by platform and architecture
			// so the best thing to do is to ask the LibraryLoader what name we
			// expect.
			// this code might be different if you customize the name of
			// the jacob dll to match some custom naming convention
			InputStream inputStream = getClass().getResource(
					"/" + LibraryLoader.getPreferredDLLName() + ".dll")
					.openStream();
			// Put the DLL somewhere we can find it with a name Jacob expects
			File temporaryDll = File.createTempFile(LibraryLoader
					.getPreferredDLLName(), ".dll");
			FileOutputStream outputStream = new FileOutputStream(temporaryDll);
			byte[] array = new byte[8192];
			for (int i = inputStream.read(array); i != -1; i = inputStream
					.read(array)) {
				outputStream.write(array, 0, i);
			}
			outputStream.close();
			temporaryDll.deleteOnExit();
			// Ask LibraryLoader to load the dll for us based on the path we
			// set
			System.setProperty(LibraryLoader.JACOB_DLL_PATH, temporaryDll
					.getPath());
			LibraryLoader.loadJacobLibrary();
			return true;
		} catch (Throwable e) {
			e.printStackTrace();
			return false;
		}
	}

}

⌨️ 快捷键说明

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