私はアプレットを開発しています。アプレットは署名済みで、一部のコードは完全に機能します。これを使用して、リモート サイトから読み取ったライブラリをローカルに保存します。
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";
}
手がかりは大歓迎です。ティア・アレハンドロ