JAVA-26394 Move java-native to core-java modules (#15092)
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
#include "com_baeldung_jni_ExampleObjectsJNI.h"
|
||||
#include <iostream>
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleObjectsJNI
|
||||
* Method: createUser
|
||||
* Signature: (Ljava/lang/String;D)Lcom/baeldung/jni/UserData;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_baeldung_jni_ExampleObjectsJNI_createUser
|
||||
(JNIEnv *env, jobject thisObject, jstring name, jdouble balance){
|
||||
|
||||
// Create the object of the class UserData
|
||||
jclass userDataClass = env->FindClass("com/baeldung/jni/UserData");
|
||||
jobject newUserData = env->AllocObject(userDataClass);
|
||||
|
||||
// Get UserData fields to set
|
||||
jfieldID nameField = env->GetFieldID(userDataClass , "name", "Ljava/lang/String;");
|
||||
jfieldID balanceField = env->GetFieldID(userDataClass , "balance", "D");
|
||||
|
||||
// Set the values of the new object
|
||||
env->SetObjectField(newUserData, nameField, name);
|
||||
env->SetDoubleField(newUserData, balanceField, balance);
|
||||
|
||||
// Return the created object
|
||||
return newUserData;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleObjectsJNI
|
||||
* Method: printUserData
|
||||
* Signature: (Lcom/baeldung/jni/UserData;)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_ExampleObjectsJNI_printUserData
|
||||
(JNIEnv *env, jobject thisObject, jobject userData){
|
||||
|
||||
// Find the class method id
|
||||
jclass userDataClass = env->GetObjectClass(userData);
|
||||
jmethodID methodId = env->GetMethodID(userDataClass, "getUserInfo", "()Ljava/lang/String;");
|
||||
|
||||
// Call the object method and get the result
|
||||
jstring result = (jstring)env->CallObjectMethod(userData, methodId);
|
||||
|
||||
// Print the result
|
||||
std::cout << "C++: User data is: " << env->GetStringUTFChars(result, NULL) << std::endl;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_baeldung_jni_ExampleObjectsJNI */
|
||||
|
||||
#ifndef _Included_com_baeldung_jni_ExampleObjectsJNI
|
||||
#define _Included_com_baeldung_jni_ExampleObjectsJNI
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleObjectsJNI
|
||||
* Method: createUser
|
||||
* Signature: (Ljava/lang/String;D)Lcom/baeldung/jni/UserData;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_baeldung_jni_ExampleObjectsJNI_createUser
|
||||
(JNIEnv *, jobject, jstring, jdouble);
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleObjectsJNI
|
||||
* Method: printUserData
|
||||
* Signature: (Lcom/baeldung/jni/UserData;)V
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_ExampleObjectsJNI_printUserData
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "com_baeldung_jni_ExampleParametersJNI.h"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleParametersJNI
|
||||
* Method: sumIntegers
|
||||
* Signature: (II)J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_com_baeldung_jni_ExampleParametersJNI_sumIntegers (JNIEnv* env, jobject thisObject, jint first, jint second){
|
||||
std::cout << "C++: The numbers received are : " << first << " and " << second << std::endl;
|
||||
return (long)first + (long)second;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleParametersJNI
|
||||
* Method: sayHelloToMe
|
||||
* Signature: (Ljava/lang/String;Z)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_ExampleParametersJNI_sayHelloToMe (JNIEnv* env, jobject thisObject, jstring name, jboolean isFemale){
|
||||
const char* nameCharPointer = env->GetStringUTFChars(name, NULL);
|
||||
std::cout << "C++: The string received is: " << nameCharPointer << std::endl;
|
||||
std::string title;
|
||||
if(isFemale){
|
||||
title = "Ms. ";
|
||||
}
|
||||
else{
|
||||
title = "Mr. ";
|
||||
}
|
||||
|
||||
std::string fullName = title + nameCharPointer;
|
||||
return env->NewStringUTF(fullName.c_str());
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_baeldung_jni_ExampleParametersJNI */
|
||||
|
||||
#ifndef _Included_com_baeldung_jni_ExampleParametersJNI
|
||||
#define _Included_com_baeldung_jni_ExampleParametersJNI
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleParametersJNI
|
||||
* Method: sumIntegers
|
||||
* Signature: (II)J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_com_baeldung_jni_ExampleParametersJNI_sumIntegers
|
||||
(JNIEnv*, jobject, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_ExampleParametersJNI
|
||||
* Method: sayHelloToMe
|
||||
* Signature: (Ljava/lang/String;Z)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_ExampleParametersJNI_sayHelloToMe
|
||||
(JNIEnv*, jobject, jstring, jboolean);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,13 @@
|
||||
#include "com_baeldung_jni_HelloWorldJNI.h"
|
||||
#include <iostream>
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_HelloWorldJNI
|
||||
* Method: sayHello
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_HelloWorldJNI_sayHello (JNIEnv* env, jobject thisObject) {
|
||||
std::string hello = "Hello from C++ !!";
|
||||
std::cout << hello << std::endl;
|
||||
return env->NewStringUTF(hello.c_str());
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_baeldung_jni_HelloWorldJNI */
|
||||
|
||||
#ifndef _Included_com_baeldung_jni_HelloWorldJNI
|
||||
#define _Included_com_baeldung_jni_HelloWorldJNI
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_baeldung_jni_HelloWorldJNI
|
||||
* Method: sayHello
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_HelloWorldJNI_sayHello
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
#include "com_baeldung_jni_RegisterNativesHelloWorldJNI.h"
|
||||
#include <iostream>
|
||||
|
||||
|
||||
JNIEXPORT jstring JNICALL hello (JNIEnv* env, jobject thisObject) {
|
||||
std::string hello = "Hello from registered native C++ !!";
|
||||
std::cout << hello << std::endl;
|
||||
return env->NewStringUTF(hello.c_str());
|
||||
}
|
||||
|
||||
static JNINativeMethod methods[] = {
|
||||
{"sayHello", "()Ljava/lang/String;", (void*) &hello },
|
||||
};
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_baeldung_jni_RegisterNativesHelloWorldJNI_register (JNIEnv* env, jobject thsObject) {
|
||||
jclass clazz = env->FindClass("com/baeldung/jni/RegisterNativesHelloWorldJNI");
|
||||
|
||||
(env)->RegisterNatives(clazz, methods, sizeof(methods)/sizeof(methods[0]));
|
||||
}
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_baeldung_jni_RegisterNativesHelloWorldJNI */
|
||||
|
||||
#ifndef _Included_com_baeldung_jni_RegisterNativesHelloWorldJNI
|
||||
#define _Included_com_baeldung_jni_RegisterNativesHelloWorldJNI
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_baeldung_jni_RegisterNativesHelloWorldJNI
|
||||
* Method: sayHello
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_jni_RegisterNativesHelloWorldJNI_sayHello
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_jni_RegisterNativesHelloWorldJNI
|
||||
* Method: register
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_baeldung_jni_RegisterNativesHelloWorldJNI_register
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,6 @@
|
||||
REM Create the header with javac -h . ClassName.java
|
||||
REM Remember to set your JAVA_HOME env var
|
||||
g++ -c -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 com_baeldung_jni_HelloWorldJNI.cpp -o com_baeldung_jni_HelloWorldJNI.o
|
||||
g++ -c -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 com_baeldung_jni_ExampleParametersJNI.cpp -o com_baeldung_jni_ExampleParametersJNI.o
|
||||
g++ -c -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 com_baeldung_jni_ExampleObjectsJNI.cpp -o com_baeldung_jni_ExampleObjectsJNI.o
|
||||
g++ -shared -o ..\..\..\native\win32\native.dll com_baeldung_jni_HelloWorldJNI.o com_baeldung_jni_ExampleParametersJNI.o com_baeldung_jni_ExampleObjectsJNI.o -Wl,--add-stdcall-alias
|
||||
@@ -0,0 +1,7 @@
|
||||
# Create the header with javac -h . ClassName.java
|
||||
# Remember to set your JAVA_HOME env var
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux com_baeldung_jni_HelloWorldJNI.cpp -o com_baeldung_jni_HelloWorldJNI.o
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux com_baeldung_jni_ExampleParametersJNI.cpp -o com_baeldung_jni_ExampleParametersJNI.o
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux com_baeldung_jni_ExampleObjectsJNI.cpp -o com_baeldung_jni_ExampleObjectsJNI.o
|
||||
g++ -shared -fPIC -o ../../../native/linux_x86_64/libnative.so com_baeldung_jni_HelloWorldJNI.o com_baeldung_jni_ExampleParametersJNI.o com_baeldung_jni_ExampleObjectsJNI.o -lc
|
||||
# Don't forget to set java.library.path to point to the folder where you have the libnative you're loading.
|
||||
@@ -0,0 +1,7 @@
|
||||
# Create the header with javac -h . ClassName.java
|
||||
# Remember to set your JAVA_HOME env var
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin com_baeldung_jni_HelloWorldJNI.cpp -o com_baeldung_jni_HelloWorldJNI.o
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin com_baeldung_jni_ExampleParametersJNI.cpp -o com_baeldung_jni_ExampleParametersJNI.o
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin com_baeldung_jni_ExampleObjectsJNI.cpp -o com_baeldung_jni_ExampleObjectsJNI.o
|
||||
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin com_baeldung_jni_RegisterNativesHelloWorldJNI.cpp -o com_baeldung_jni_RegisterNativesHelloWorldJNI.o
|
||||
g++ -dynamiclib -o ../../../native/macos/libnative.dylib com_baeldung_jni_HelloWorldJNI.o com_baeldung_jni_ExampleParametersJNI.o com_baeldung_jni_ExampleObjectsJNI.o com_baeldung_jni_RegisterNativesHelloWorldJNI.o -lc
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
#include "com_baeldung_unsatisfiedlink_JniUnsatisfiedLink.h"
|
||||
#include <iostream>
|
||||
|
||||
/*
|
||||
* Class: com_baeldung_unsatisfiedlink_JniUnsatisfiedLink
|
||||
* Method: test
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_unsatisfiedlink_JniUnsatisfiedLink_test (JNIEnv* env, jobject thisObject) {
|
||||
std::string test = "Test OK";
|
||||
std::cout << test << std::endl;
|
||||
return env->NewStringUTF(test.c_str());
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_baeldung_unsatisfiedlink_JniUnsatisfiedLink */
|
||||
|
||||
#ifndef _Included_com_baeldung_unsatisfiedlink_JniUnsatisfiedLink
|
||||
#define _Included_com_baeldung_unsatisfiedlink_JniUnsatisfiedLink
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_baeldung_unsatisfiedlink_JniUnsatisfiedLink
|
||||
* Method: test
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_baeldung_unsatisfiedlink_JniUnsatisfiedLink_test
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
# Create the header with javac -h . ClassName.java
|
||||
# Remember to set your JAVA_HOME env var
|
||||
# Don't forget to set java.library.path to point to the folder where you have the lib you're loading.
|
||||
MYSELF="$(readlink -f "$0")"
|
||||
MYDIR="${MYSELF%/*}"
|
||||
|
||||
cd "$MYDIR"
|
||||
class_name=com_baeldung_unsatisfiedlink_JniUnsatisfiedLink
|
||||
lib_name=test
|
||||
|
||||
g++ -c -fPIC -I"${JAVA_HOME}/include" -I"${JAVA_HOME}/include/linux" ${class_name}.cpp -o ${class_name}.o
|
||||
g++ -shared -fPIC -o lib${lib_name}.so ${class_name}.o -lc
|
||||
|
||||
# 32-bit version
|
||||
g++ -m32 -c -fPIC -I"${JAVA_HOME}/include" -I"${JAVA_HOME}/include/linux" ${class_name}.cpp -o ${class_name}32.o
|
||||
g++ -m32 -shared -fPIC -o lib${lib_name}32.so ${class_name}32.o -lc
|
||||
|
||||
# dummy version
|
||||
touch ${class_name}-dummy.o
|
||||
|
||||
ls lib*
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.baeldung.jna;
|
||||
|
||||
import com.sun.jna.Library;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Platform;
|
||||
|
||||
public interface CMath extends Library {
|
||||
CMath INSTANCE = Native.load(Platform.isWindows() ? "msvcrt" : "c", CMath.class);
|
||||
double cosh(double value);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.baeldung.jna;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.baeldung.jna;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sun.jna.FunctionMapper;
|
||||
import com.sun.jna.LastErrorException;
|
||||
import com.sun.jna.Library;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.NativeLong;
|
||||
import com.sun.jna.Platform;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.Structure.FieldOrder;
|
||||
|
||||
public interface NativeFS extends Library {
|
||||
|
||||
FunctionMapper mapper = (library,method) -> {
|
||||
if (Platform.isWindows()) {
|
||||
return "_" + method.getName();
|
||||
}
|
||||
else {
|
||||
return "__x" + method.getName(); // On Linux, stat is actually _xstat
|
||||
}
|
||||
};
|
||||
|
||||
public NativeFS INSTANCE = Native.load(Platform.isWindows() ? "msvcrt" : "c",
|
||||
NativeFS.class,
|
||||
Collections.singletonMap(Library.OPTION_FUNCTION_MAPPER, mapper));
|
||||
|
||||
int stat(String path, Stat stat) throws LastErrorException;
|
||||
|
||||
@FieldOrder({"st_dev","st_ino","st_mode","st_nlink","st_uid","st_gid","st_rdev","st_size","st_atime","st_mtime","st_ctime"})
|
||||
public class Stat extends Structure {
|
||||
public int st_dev;
|
||||
public int st_ino;
|
||||
public short st_mode;
|
||||
public short st_nlink;
|
||||
public short st_uid;
|
||||
public short st_gid;
|
||||
public int st_rdev;
|
||||
public NativeLong st_size;
|
||||
public NativeLong st_atime;
|
||||
public NativeLong st_mtime;
|
||||
public NativeLong st_ctime;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.baeldung.jna;
|
||||
|
||||
import com.sun.jna.LastErrorException;
|
||||
import com.sun.jna.Library;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Platform;
|
||||
import com.sun.jna.Pointer;
|
||||
|
||||
public interface StdC extends Library {
|
||||
StdC INSTANCE = Native.load(Platform.isWindows() ? "msvcrt" : "c", StdC.class );
|
||||
Pointer malloc(long n);
|
||||
void free(Pointer p);
|
||||
Pointer memset(Pointer p, int c, long n);
|
||||
int open(String path, int flags) throws LastErrorException;
|
||||
int close(int fd) throws LastErrorException;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.baeldung.jni;
|
||||
|
||||
public class ExampleObjectsJNI {
|
||||
|
||||
static {
|
||||
System.loadLibrary("native");
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
ExampleObjectsJNI instance = new ExampleObjectsJNI();
|
||||
UserData newUser = instance.createUser("John Doe", 450.67);
|
||||
instance.printUserData(newUser);
|
||||
}
|
||||
|
||||
public native UserData createUser(String name, double balance);
|
||||
|
||||
public native String printUserData(UserData user);
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.baeldung.jni;
|
||||
|
||||
public class ExampleParametersJNI {
|
||||
|
||||
static {
|
||||
System.loadLibrary("native");
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Java: My full name: " + new ExampleParametersJNI().sayHelloToMe("Martin", false));
|
||||
long sumFromNative = new ExampleParametersJNI().sumIntegers(456, 44);
|
||||
System.out.println("Java: The sum coming from native code is: " + sumFromNative);
|
||||
}
|
||||
|
||||
// Declare another method sumIntegers that receives two integers and return a long with the sum
|
||||
public native long sumIntegers(int first, int second);
|
||||
|
||||
// Declare another method sayHelloToMe that receives the name and gender and returns the proper salutation
|
||||
public native String sayHelloToMe(String name, boolean isFemale);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.baeldung.jni;
|
||||
|
||||
public class HelloWorldJNI {
|
||||
|
||||
static {
|
||||
System.loadLibrary("native");
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new HelloWorldJNI().sayHello();
|
||||
}
|
||||
|
||||
// Declare a native method sayHello() that receives no arguments and returns void
|
||||
public native String sayHello();
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.baeldung.jni;
|
||||
|
||||
public class RegisterNativesHelloWorldJNI {
|
||||
|
||||
static {
|
||||
System.loadLibrary("native");
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
RegisterNativesHelloWorldJNI helloWorldJNI = new RegisterNativesHelloWorldJNI();
|
||||
helloWorldJNI.register();
|
||||
helloWorldJNI.sayHello();
|
||||
}
|
||||
|
||||
public native String sayHello();
|
||||
|
||||
public native void register();
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.baeldung.jni;
|
||||
|
||||
public class UserData {
|
||||
|
||||
public String name;
|
||||
public double balance;
|
||||
|
||||
public String getUserInfo() {
|
||||
return "[name]=" + name + ", [balance]=" + balance;
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.baeldung.jvmbitversion;
|
||||
|
||||
import com.sun.jna.Platform;
|
||||
|
||||
public class JVMBitVersion {
|
||||
|
||||
public String getUsingSystemClass() {
|
||||
return System.getProperty("sun.arch.data.model") + "-bit";
|
||||
}
|
||||
|
||||
public String getUsingNativeClass() {
|
||||
if (com.sun.jna.Native.POINTER_SIZE == 8) {
|
||||
return "64-bit";
|
||||
} else if (com.sun.jna.Native.POINTER_SIZE == 4) {
|
||||
return "32-bit";
|
||||
} else
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
public boolean getUsingPlatformClass() {
|
||||
return (Platform.is64Bit());
|
||||
}
|
||||
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.baeldung.unsatisfiedlink;
|
||||
|
||||
public class JniUnsatisfiedLink {
|
||||
|
||||
public static final String LIB_NAME = "test";
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.loadLibrary(LIB_NAME);
|
||||
new JniUnsatisfiedLink().test();
|
||||
}
|
||||
|
||||
public native String test();
|
||||
|
||||
public native String nonexistentDllMethod();
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||
</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="STDOUT" />
|
||||
</root>
|
||||
</configuration>
|
||||
@@ -0,0 +1,3 @@
|
||||
grant {
|
||||
permission java.lang.RuntimePermission "loadLibrary.test";
|
||||
};
|
||||
Reference in New Issue
Block a user