아래는 JNative 구성 요소입니다.
jnative.sourceforge.net/ JNative 오픈 소스 프로젝트를 다운로드하려면 여기로 이동하세요. 1.3.2를 다운로드했습니다.
JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30" Month="12" year="1899">1.3.2</st1:chsdate>.zip 압축 풀기
JNativeCpp.dll, libJNativeCpp.so, JNative.jar라는 세 개의 파일을 얻습니다.
JNativeCpp.dll은 Windows에서 사용되며, 이를 windows/system32 디렉토리에 복사합니다.
Linux에서는 libJNativeCpp.so를 시스템 디렉터리에 복사합니다.
JNative.jar 이것은 확장 패키지입니다. 프로젝트 LIB로 가져오거나 jdk/jre/lib/ext에 복사하면 시스템이 자동으로 로드합니다.
•사용 지침
내 프로젝트에서는 JNative 구성 요소를 사용하여 애플리케이션 서버의 상태를 테스트하는 TestAppSvr.dll 파일을 호출합니다. Dll 파일에는 정수 결과(1 또는 0)를 반환하는 TestConnect() 메서드가 포함되어 있습니다.
먼저 JNative 구성 요소의 Windows 환경을 구성합니다.
Native가 사용해야 하는 JNativeCpp.dll을 시스템 디스크의 /WINDOWS/system32 아래에 배치합니다.
JNative.jar을 프로젝트로 가져오고 새 호출 클래스를 만듭니다.
자바 코드
java.io.파일 가져오기;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
org.xvolks.jnative.JNative 가져오기;
org.xvolks.jnative.Type 가져오기;
import org.xvolks.jnative.Exceptions.NativeException;
공개 클래스 AppSvrTestConnect {
공개 AppSvrTestConnect() {
}
/**
* 애플리케이션 서버 연결 상태 테스트
*
*테스트커넥트
* @param ip 응용서버 IP
* @param 포트 포트
* @param intrcpt 데이터 압축 방식 사용 여부 1:true 0:false
* @return int 1: 성공 0: 실패
* @throws NativeException
* @throws IllegalAccessException
*/
private static final int TestConnect(String ip, int port, int intrcpt)는 NativeException, IllegalAccessException을 발생시킵니다.
JNative n = null;
노력하다 {
n = new JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Type.INT);
int i = 0;
n.setParameter(i++, Type.STRING, ip);
n.setParameter(i++, Type.INT, "" + 포트);
n.setParameter(i++, Type.INT, "" + intrcpt);
n.invoke();
return Integer.parseInt(n.getRetVal());
} 마지막으로 {
if (n != null)
n.dispose();
}
}
/**
* Dll 파일 경로를 지정하고, 로컬 링크 라이브러리를 동적으로 로드하고, 응용 프로그램 서버 연결 상태를 테스트합니다.
* setDllPath
* @param path DLL 이름을 제외한 Dll 파일의 경로입니다. 예: windows - d:/test/test/ unix - root/test/test/
* @param ip 응용서버 IP
* @param 포트 포트
* @param intrcpt 데이터 압축 방식 사용 여부 1:true 0:false
* @return int 1: 성공 0: 실패
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt)가 NativeException, IllegalAccessException을 발생시킵니다.
경로 += "TestAppSvr.dll";
System.load(경로);
TestConnect(ip,port,intrcpt)를 반환합니다.
}
/**
* Dll 파일은 JRE/bin 디렉토리에 위치하며, ClassLoader는 System.loadLibrary()를 통해 로컬 링크 라이브러리를 동적으로 로드할 수 있습니다.
* TestConnectFromDllPath
* @param ip 응용서버 IP
* @param 포트 포트
* @param intrcpt 데이터 압축 방식 사용 여부 1:true 0:false
* @return int 1: 성공 0: 실패
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath(String ip, int port, int intrcpt)가 NativeException, IllegalAccessException을 발생시킵니다.
System.loadLibrary("TestAppSvr");
TestConnect(ip,port,intrcpt)를 반환합니다.
}
}
이 클래스는 Dll 파일의 메서드를 호출하고 결과를 반환하는 데 사용되는 정적 개인 메서드를 구현합니다.
개인 정적 최종 int TestConnect(문자열 ip, int 포트, int intrcpt)
두 가지 정적 공용 메서드, 두 가지 방법으로 DLL 파일 로드
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) //DLL 파일을 통한 경로
public static final int TestConnectFromDllPath(String ip, int port, int intrcpt) //ClassLoader를 통해 새 클래스를 생성하고 AppSvrTestConnect.java를 호출하고 메소드 1 호출을 구현하고 TestAppSvr.dll 파일과 Demo.java를 동일하게 넣습니다. 디렉터리이므로 Demo.java의 경로를 얻은 후 TestAppSvr.dll의 경로를 얻을 수 있으며 AppSvrTestConnect.TestConnectFromDllPath() 메서드를 호출하면 올바른 정보를 반환할 수 있습니다. 두 번째 방법은 TestAppSvr.dll을 Jre/에 배치하는 것입니다. bin 디렉토리. JVM의 Classloader에 자동으로 로드된 다음 System.loadLibrary("TestAppSvr")를 통해 DLL 파일을 어셈블할 수 있습니다.
자바 코드
문자열 경로=getClass().getResource(File.separator).getPath();
경로 = path.substring(1,path.length());
System.out.println(path); //DLL 파일의 경로를 가져옵니다.
문자열 ip = "192.168.0.48"; //서버 IP
int 포트 = 221;
int intrcpt = 1; //데이터 압축이 전송되며 1은 사용하지 않음을 의미합니다.
//방법 1 Dll 파일의 경로를 전달합니다.
//int info = AppSvrTestConnect.TestConnectFromDllPath(path, ip, port, intrcpt);
//방법 2 Dll 파일은 JRE/bin 디렉토리에 위치합니다.
int info = AppSvrTestConnect.TestConnectFromDllPath(ip, 포트, intrcpt);
//1은 성공, 0은 실패
if (정보 == 1)
System.out.println("응용프로그램 서버를 사용할 수 있습니다.");
또 다른
System.out.println("애플리케이션 서버를 사용할 수 없습니다. IP 주소와 포트가 올바른지 확인하세요.");
정보 반환;
}
System.loadLibrary(): Windows/System32, jre/bin 또는 Tomcat/bin 디렉토리 아래에 로컬 링크 라이브러리를 로드합니다.
System.load(): 특정 디렉터리에 따라 로컬 링크 라이브러리를 추가합니다. 이는 절대 경로여야 합니다.
•주목
위의 예제 프로젝트는 예제이기 때문에 디자인이 많지 않습니다. DLL 파일 로드, DLL 파일 메서드 호출 및 정보 반환만 구현합니다.
JNative에 대한 자세한 설명은 JNative 소스 프로그램 및 예제를 참고하시기 바랍니다.
JVM은 기본 ClassLoader가 네이티브 라이브러리를 로드하도록 허용하고 로드된 네이티브 라이브러리를 언로드하는 특수 API를 제공하지 않으므로 프로젝트를 디버깅할 때 웹 서버를 독립적으로 시작해야 합니다.