while循环中的Java system.load() intd=0; 而(d

while循环中的Java system.load() intd=0; 而(d,java,dll,while-loop,Java,Dll,While Loop,尝试多次加载msgbox DLL。上面的代码运行良好,但我有两个问题。1) 为什么System.load()只加载一次然后退出?2) 为什么在我关闭msgbox之前JAR仍在运行 有没有办法避免这些问题?例如,要使用system.load加载相同的msgbox DLL 5-6次吗 1) 为什么System.load()只加载一次然后退出 因为这是它应该工作的方式,所以它没有意义多次加载同一个库(为什么要让同一个程序指令多次占用内存?System.load()在内部调用Runtime.getRun

尝试多次加载msgbox DLL。上面的代码运行良好,但我有两个问题。1) 为什么System.load()只加载一次然后退出?2) 为什么在我关闭msgbox之前JAR仍在运行

有没有办法避免这些问题?例如,要使用system.load加载相同的msgbox DLL 5-6次吗

1) 为什么System.load()只加载一次然后退出

因为这是它应该工作的方式,所以它没有意义多次加载同一个库(为什么要让同一个程序指令多次占用内存?
System.load()
在内部调用
Runtime.getRuntime().load0()
,调用
ClassLoader.loadLibrary0()
,这将验证库是否已加载,如果已加载,则返回

2) 为什么在我关闭msgbox之前JAR仍在运行

因为本机代码尚未完成其执行。JVM在其所有非守护进程线程完成之前不会完成


我只是猜测,但我认为您正在显示msgbox int是dll的入口点函数。如果是这种情况,您应该在本机函数中显示msgbox,您可以多次调用它,这样您就可以拥有5个msgbox。

为什么要多次加载DLL?您试图完成什么?我试图通过使用system.load()多次完成DLL执行。没有funcy项目。DLL是一个库,其中存储了一些函数。您不需要多次加载它。加载一次,调用5次相同的函数我知道DLL是什么:)我编写了我正在调用的DLL。我只想打好几次,所以打好几次。这并不意味着您必须多次加载它。Java不允许这样做,操作系统也不允许这样做。后续加载只是增加使用计数。
int d = 0;

while( d < 5 ) {
    System.load(PATH-OF-THE-DLL-IN-HERE.DLL(returned_by_another_function_as_string));
    d++;
}