我试图在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