import java.io.IOException;
import java.lang.management.ManagementFactory;
import com.sun.jna.Callback;
import com.sun.jna.Library;
import com.sun.jna.Native;
public class PluginProxy
{
private static String libPath;
private interface LibPluginProxy extends Library
{
static LibPluginProxy INSTANCE = (LibPluginProxy) Native.loadLibrary(libPath, LibPluginProxy.class);
public void init(Callback callback);
public void start();
public void stop();
public void send(String msg);
}
public static void main(String[] args) throws Exception {
libPath = "libPluginProxy.so";
LibPluginProxy.INSTANCE.init(new CB_OnMsg());
System.out.println("in main function.");
//add shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
Native.unregister(LibPluginProxy.class);
System.out.println("stop..");
LibPluginProxy.INSTANCE.stop();
String n = ManagementFactory.getRuntimeMXBean().getName();
if (n == null) return;
String pid = n.substring(0, n.indexOf("@"));
if (pid == null) return;
try
{
Runtime.getRuntime().exec("kill -9 " + pid);
}
catch (IOException e)
{
e.printStackTrace();
}
System.exit(-1);
}
}));
Thread t = new Thread(new Runnable() {
@Override
public void run() {
LibPluginProxy.INSTANCE.start();
System.out.println("started in thread..");
}
});
t.start();
System.out.println("started!!");
}
}
CB_OnMsg.java
import com.sun.jna.Callback;
public class CB_OnMsg implements Callback {
// 应用创建
public final int onMsg() {
System.out.println("CB_OnMsg, in function onMsg.");
return 0;
}
}