Java-апплет для загрузки файлов файлов - PullRequest
0 голосов
/ 08 августа 2011

У меня есть апплет, который выполняется в файле HTML, который пользователь загружает и открывает локально (т.е. file:// в строке URL-адреса). Этот апплет имеет метод, который загружает файл из Интернета и сохраняет его в каталоге внутри каталога, в котором запущен апплет. В моем HTML-файле я вызываю функцию для загрузки файла, и она работает, но когда я вызываю его во второй раз, чтобы загрузить другой файл, я получаю Error calling method on NPObject. Я не получаю никакой ошибки на стороне Java (у меня есть консоль открыта и остается чистой). В чем может быть проблема здесь? Большое спасибо за вашу помощь. Ниже приведен код апплета.

import java.security.*;
import java.io.*;
import java.nio.channels.*;
import java.net.*;

public class EPPenDrive extends java.applet.Applet {

    public final static String baseURL = "http://localhost/data/documents/";

    public String downloadFile(final String filename) {
        return (String)AccessController.doPrivileged(new PrivilegedAction() {
            public Object run() {       
              try {
                URL finalURL = new URL(baseURL + filename);
                ReadableByteChannel rbc = Channels.newChannel(finalURL.openStream());
                URL appletDir = getCodeBase();
                FileOutputStream fos = new FileOutputStream(appletDir.getPath() + "documents/"+ filename);
                fos.getChannel().transferFrom(rbc, 0, 1 << 24);
                return 1;
              } catch (Exception x) {
                x.printStackTrace();
                return null;
              }
            }
          });
    }

    public void init() { }
    public void stop() { }

}

1 Ответ

0 голосов
/ 08 августа 2011

Я обнаружил проблему: метод run() заблокируется при возврате 1. Я изменил его на return null, и теперь все работает. :)

...