0

私はアプレットを開発しています。アプレットは署名済みで、一部のコードは完全に機能します。これを使用して、リモート サイトから読み取ったライブラリをローカルに保存します。

AccessController.doPrivileged(new PrivilegedAction() {
    public Object run() {
        try{
            URL url = new URL(getCodeBase(), "./dyn_libs/libusb4java.so");
            byte[] buffer = new byte[1024];
            InputStream is = url.openStream();
            String tmpDir = System.getProperty("java.io.tmpdir");
            String fileSeparator = System.getProperty("file.separator");
            String userName = System.getProperty("user.name");

            FileOutputStream os = new FileOutputStream(tmpDir+fileSeparator+"libusb4java.so");
            int nRead=0;
            int total=0;

            while((nRead = is.read(buffer))!= -1){   
                os.write(buffer);
                total+=nRead;
            } 
            is.close();
            os.close();

        }catch (Exception e){
            PrintWriter writer = null;
            try {
                writer = new PrintWriter(new FileWriter("/tmp/salida.txt", true));
                writer.println("error en el catch"+e.getMessage());
                writer.close();
                return "error en el access controller : "+e.getMessage();
            } catch (Exception ex) {
                Logger.getLogger(fpc_01.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                writer.close();
            }
        }

        return null;
    }
});

しかし、ネイティブ ライブラリを読み込もうとしても、何も起こりません。つまり、エラーは発生せず、アプレットの実行が停止するだけです。ネイティブ ライブラリを次のようにロードします。

try {
    String resultado= AccessController.doPrivileged(new PrivilegedAction<String>() {
        @Override
        public String run() {
            PrintWriter writer = null;
            try {
                writer = new PrintWriter(new FileWriter("/tmp/salida.txt", true));
                // privileged code goes here, for example:
                System.load("/tmp/libusb4java.so");
                writer.println("exito");
                writer.close();
                return "exito"; // nothing to return
            }
            catch (Exception e)
            {
                writer.println("error en el catch"+e.getMessage());
                writer.close();
                return "no puede cargar biblioteca";
            }
        }
    });              
}
catch (Exception e)
{
    PrintWriter writer;
    writer = new PrintWriter(new FileWriter("/tmp/salida.txt", true));
    writer.println("error en el catch"+e.getMessage());
    writer.close();
    return "problema al cargar";
}

手がかりは大歓迎です。ティア・アレハンドロ

4

1 に答える 1

0

アプレットでjnlpファイルを使用する場合は、 nativelib タグを使用することもできます。したがって、ネイティブ ライブラリは、ルート ディレクトリにネイティブ ライブラリを含む JAR ファイルにパッケージ化する必要があります。jnlp ファイルの一部は次のようになります。

<nativelib href="http://yourremotesite.com/dyn_libs/libusb4java.jar"/>
于 2013-10-14T07:54:32.020 に答える