Я хочу сделать апплет, способный загружать файлы на компьютер, а затем открывать их в соответствующем редакторе (когда файл сохраняется, он должен быть загружен обратно). Однако, прежде чем я потрачу часы на то, чтобы заставить его работать, я должен убедиться, что им действительно можно управлять (сделал это с помощью настольного приложения Java, а не апплета).
Поэтому я написал простой апплет, который создает файл, если он не существует. Приложение подписано и загружается в браузере должным образом. На экран пишется следующее:
Исключение ввода-вывода: доступ запрещен
Я пометил разные ошибки, чтобы знать, какая из них не работает. Ниже мой апплет:
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()));
}
}
}
Это последнее исключение, которое выбрасывается. Обратите внимание, что первое, что я делаю, это проверяю разрешения. Эта проверка не проходит.
Апплет является самоподписанным, но это временно. Я не хочу тратить сотни долларов на покупку сертификата, если апплет не работает....
Когда я запускаю приложение с помощью appletviewer, код работает. Это нормально, но мне нужно знать, что это сработает, когда я куплю настоящий сертификат.
HTML-код:
<applet code="DocumentApplet" archive="applet.jar" width="300" height="200">
</applet>
Окружающая среда: Windows7 + JDK 1.7.0_05
PS: последние два дня я также провел за чтением Stackoverflow и поиском в Google. Я твердо верю, что сделал все, что должен был сделать...
Throwable.printStackTrace()
. Я удивлен, что вы бродили по ТАК 2 дня и не увидели этого совета! - person Andrew Thompson   schedule 02.07.2012