无法在Java小程序中将文件设置为可写
我正在尝试从jar加载dll文件,以便使用具有以下修复程序的小程序: 我创建文件,将其设置为可写和可执行,但当我使用canWrite()/canExecute()检查它时 它返回false。小程序已签名 守则:无法在Java小程序中将文件设置为可写,java,file,dll,applet,Java,File,Dll,Applet,我正在尝试从jar加载dll文件,以便使用具有以下修复程序的小程序: 我创建文件,将其设置为可写和可执行,但当我使用canWrite()/canExecute()检查它时 它返回false。小程序已签名 守则: private static void loadLib() { URL res = SystemActivityNotifications.class.getResource("/sys-native /sysactivitynotifications.dll"); Input
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
…尝试从jar加载dll文件以使用小程序
对于部署Java小程序,最好的选择通常是使用启动小程序。JWS在Windows、OSX和*nix上工作
Java Web Start(JWS)是Oracle公司的技术,用于直接从网络或internet链接启动富客户端(Swing、Java FX、AWT、SWT…)桌面应用程序。它为支持Java的平台提供“一键式”安装
JWS提供了许多吸引人的功能,包括但不限于闪屏、桌面集成、文件关联、自动更新(包括延迟下载和对更新的编程控制)、按平台、体系结构或地区划分本地人和其他资源下载,配置运行时环境(最低J2SE版本、运行时选项、RAM等),使用扩展轻松管理公共资源
将本地人放在(签名的)Jar的根目录中,并在启动文件中放置对该Jar的引用,它们将被放置在应用程序的类路径上。是的,谢谢,但我们没有使用JWS,dll下载和执行正确,但只有在第二次运行时才正确。@DimaO您能找出问题所在吗?是的,但我记不清了,我更改了所有下载代码,DLL也更改了…如果您有相同的问题,您可以检查锁定DLL的进程,也许可以将其下载到java路径中的其他文件夹