我試圖在JAVA代碼中調用MessageBoxA函數。以下方法出了什麼問題,以致於我的程序會引發很多錯誤?在java應用程序中使用winapi
package loading.libraries;
public class User32
{
//first case:public native int MessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType);
//second: public native int MessageBoxA(int hWnd,String lpText,String lpCaption,int uType);
static
{
System.loadLibrary("User32");
}
}
package loading.libraries;
public class LoadingLibraries
{
public static void main(String[] args)
{
User32 hwapi = new User32();
hwapi.MessageBoxA(0,"Hello","World",0);
}
}
1日:
run: Exception in thread "main" java.lang.ClassFormatError: Code attribute in native or abstract methods in class file loading/libraries/MessageBox at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at loading.libraries.LoadingLibraries.main(LoadingLibraries.java:8) Java Result: 1 BUILD SUCCESSFUL (total time: 2 seconds)
2擋:
run: Exception in thread "main" java.lang.UnsatisfiedLinkError: loading.libraries.User32.MessageBoxA(ILjava/lang/String;Ljava/lang/String;I)I at loading.libraries.User32.MessageBoxA(Native Method) at loading.libraries.LoadingLibraries.main(LoadingLibraries.java:10) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)
爲什麼你在USER32類方法只能說「靜態」沒有名字,返回類型或接入標識? – DrinkJavaCodeJava 2013-03-19 14:32:34
@DrinkJavaCodeJava靜態塊是一個「靜態初始化器」。它在加載類時自動調用 – user489041 2013-03-19 14:49:21