我正在尝试从 jar 中加载一个 dll 文件,以使用带有此修复程序的小程序:
我创建文件,将其设置为可写和可执行,但是当我使用 canWrite()/canExecute() 检查它时,它返回 false。小程序已签名。
编码:
private static void loadLib() {
URL res = SystemActivityNotifications.class.getResource("/sys-native
/sysactivitynotifications.dll");
InputStream in = res.openStream();
File dll = new File(path + "sysactivitynotifications.dll");
dll.setExecutable(true);
dll.setWritable(true);
logger.info(dll.canWrite() + " " + dll.canExecute());
FileOutputStream fos = new FileOutputStream(dll);
byte[] array = new byte[1024];
try {
for(int i = in.read(array); i != 1; i=in.read(array)) {
fos.write(array, 0, i);
}
} catch (IOException e) { logger.info("Cannot write to file: " + e.getMessage()); }
fos.close();
in.close();
System.load(dll.getAbsolutePath());
}
该文件已正确创建,但在尝试写入时会引发异常。
编辑:它在我第二次运行小程序时写入文件,但如果我删除文件并再次运行,第一次迭代不起作用。
忘了说:上面的所有代码都来自 System.load.library(dll); 之后的一个 catch 块;抛出异常。
try
{
System.loadLibrary("sysactivitynotifications");
ptr = allocAndInit();
if (ptr == -1)
ptr = 0;
}
catch (Throwable t)
{
if (t instanceof ThreadDeath)
throw (ThreadDeath) t;
else {
loadLib();
}
}
编辑:它向我抛出了这个错误:
java.lang.UnsatisfiedLinkError: C:\: The process cannot access the file because it is being used by another process