Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Java小程序中将文件设置为可写_Java_File_Dll_Applet - Fatal编程技术网

无法在Java小程序中将文件设置为可写

无法在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

我正在尝试从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
…尝试从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路径中的其他文件夹