В последнее время я пытаюсь получить информацию о мышке с помощью jna, потому что моему проекту нужна эта функция. The.But есть исключение, когда я запускаю следующий код. У меня есть Google, но нет ничего о проблеме. Япутать, пожалуйста, помогите мне ~~
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HMODULE;
import com.sun.jna.platform.win32.WinDef.LPARAM;
import com.sun.jna.platform.win32.WinDef.LRESULT;
import com.sun.jna.platform.win32.WinDef.WPARAM;
import com.sun.jna.platform.win32.WinUser.HHOOK;
import com.sun.jna.platform.win32.WinUser.HOOKPROC;
import com.sun.jna.platform.win32.WinUser.MSG;
public class MouseHook implements Runnable{
public static final int WM_MOUSEMOVE = 512;
private static HHOOK hhk;
private static LowLevelMouseProc mouseHook;
final static User32 lib = User32.INSTANCE;
private boolean [] on_off=null;
public MouseHook(boolean [] on_off){
this.on_off = on_off;
}
public interface LowLevelMouseProc extends HOOKPROC {
LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam);
}
public static void main(String[] args) {
new Thread(new MouseHook(new boolean[] {true})).start();
}
public static class MOUSEHOOKSTRUCT extends Structure {
public static class ByReference extends MOUSEHOOKSTRUCT implements
Structure.ByReference {
};
public User32.POINT pt;
public int wHitTestCode;
public User32.ULONG_PTR dwExtraInfo;
@Override
protected List<String> getFieldOrder() {
// TODO Auto-generated method stub
return null;
}
}
public void run() {
HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
mouseHook = new LowLevelMouseProc() {
public LRESULT callback(int nCode, WPARAM wParam,LPARAM lParam,
MOUSEHOOKSTRUCT info) {
SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String fileName=df1.format(new Date());
String time=df2.format(new Date());
BufferedWriter bw1=null;
BufferedWriter bw2=null;
try {
bw1=new BufferedWriter(new FileWriter(new File(".//log//"+fileName+"_Mouse.txt"),true));
bw2=new BufferedWriter(new FileWriter(new File(".//log//"+fileName+"_Common.txt"),true));
} catch (IOException e) {
e.printStackTrace();
}
if (on_off[0] == false) {
System.exit(0);
}
if (nCode >= 0) {
switch (wParam.intValue()) {
case MouseHook.WM_MOUSEMOVE:
try {
bw1.write(time+" #### "+"x=" + info.pt.x
+ " y=" + info.pt.y+"\r\n");
bw2.write(time+" #### "+"x=" + info.pt.x
+ " y=" + info.pt.y+"\r\n");
bw1.flush();
bw2.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return lib
.CallNextHookEx(hhk, nCode, wParam, lParam);//info.getPointer());
}
@Override
public LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam) {
// TODO Auto-generated method stub
return null;
}
};
hhk = lib.SetWindowsHookEx(User32.WH_MOUSE_LL, mouseHook, hMod, 0);
int result;
MSG msg = new MSG();
while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {
if (result == -1) {
System.err.println("error in get message");
break;
} else {
System.err.println("got message");
lib.TranslateMessage(msg);
lib.DispatchMessage(msg);
}
}
lib.UnhookWindowsHookEx(hhk);
}
}
Следующая ошибка:
com.sun.jna.Native$1 uncaughtException
WARNING: JNA: Callback util.MouseHook$1@48d7f92f threw the following exception: java.lang.NullPointerException
Я был бы признателен, если бы вы могли помочь мне решить проблему !!