我想使Applet能夠將文件下載到計算機,然後在關聯的編輯器中打開它們(當文件被保存時,它應該被上傳回再次)。但是,在花費數小時才能使其運行之前,我必須確保它實際上是可管理的(使用Java桌面應用程序而不是Applet)。自簽名Applet在寫入文件時拋出SecurityException
因此,我寫了一個簡單的小程序,創建一個文件,如果它不存在。應用程序是簽署並加載在瀏覽器中,因爲它應該。寫入屏幕下面:
IO異常:訪問被拒絕
我已經標記了不同的錯誤,所以我知道哪一個失敗。以下是我的小程序:
import javax.swing.*;
import java.security.*;
import java.io.*;
public class DocumentApplet extends JApplet
{
private static final long serialVersionUID = -2354727776089972258L;
public void start()
{
add (new JButton ("Hello, World"));
AccessControlContext acc = (AccessControlContext) System.getSecurityManager().getSecurityContext();
try
{
acc.checkPermission(new FilePermission("test.txt", "write"));
}
catch (SecurityException e)
{
add (new JLabel ("Permission Exception: " + e.getMessage()));
return;
}
try
{
File f = AccessController.<File>doPrivileged(new PrivilegedAction<File>()
{
public File run()
{
return new File ("test.txt");
}
});
if (! f.exists())
{
f.createNewFile();
}
}
catch (AccessControlException e)
{
add (new JLabel ("Access: " + e.getMessage()));
}
catch (IOException e)
{
add (new JLabel ("IO Exception: " + e.getMessage()));
}
}
}
這是最後一個引發的異常。請注意,我所做的第一件事是檢查權限。該檢查不會失敗。
Applet是自簽名的,但這只是暫時的。 我不想花數百美元購買證書,如果小程序失敗..。
當我使用appletviewer運行應用程序時,代碼有效。沒關係,但是我需要知道,當我購買真正的證書時它會起作用。
HTML代碼:
<applet code="DocumentApplet" archive="applet.jar" width="300" height="200">
</applet>
環境:Windows7的JDK + 1.7.0_05
PS:我也花了最後兩天讀#2和谷歌搜索。我堅信我所做的一切都是我應該做的......
只是爲了檢查你可以運行你的瀏覽器作爲管理員,看看它是否寫入? –
什麼是拋出異常的棧跟蹤? – trashgod
對於***每捕獲一次,請調用'Throwable.printStackTrace()' - 我很驚訝你在沒有看到這個建議的情況下瀏覽了2天! –