2014-10-24 4 views
4

У меня проблема с передачей некоторых данных из JavaScript в апплет. Я думаю, что размер данных слишком велик (18M символов в строке), чтобы передать его через LiveConnect.Размер параметра в вызове апплета слишком велик

Я ставлю образцы кода ниже:

JavaScript:

var bigData = generateSomeBigData(18000000); // string contaning 18 000 000 characters 
applet.Execute(bigData); // no error 

апплета:

public void Execute(String data) { 
    this.doSomethingWithData(data); // data is null 
} 

я не получил каких-либо ошибок или исключений в Java-консоли или в JavaScript коде. Я пробовал запускать апплет с большой кучей, но это не помогло.

... <param name="java_arguments" value="-Xmx128m" /> ... 

Единственная проблема в том, я получаю null вместо данных строки флуда, это не зависит от браузера (FF, Chrome).

+0

* «Размер параметра в вызове апплета слишком велик» * Да, конечно, 18 мегабайт слишком велико! ..У вас есть вопрос? –

+0

Да, как передать еще большие данные в апплет? –

+0

Я мог бы реализовать некоторый механизм фрагментации, но я спрашиваю, есть ли способ разрешить передачу больших данных только с измененной конфигурацией апплета. –

ответ

0

Я решил эту проблему. Я перевел создание данных на серверный сайт, и я передаю данные в апплет, используя one time self destructing link. Апплет может загружать информацию, которая больше недоступна, и возвращать результат.

Вот вам пример:

Сервер:

String bigData = this.generateBigData(18000000); 
String linkToData = this.getOneTimeLink(bigData); 

JavaScript:

applet.Execute(linkToBigData); 

Applet:

public void Execute(String link) { 
    String data = this.downloadData(link); 
    this.doSomethingWithData(data); // data is not null ;) 
} 

EDIT 11 мая 2015 года :

Возможно, вам нужно небольшое объяснение, связанное с одноразовым соединением. Я использовал его, потому что это было еще одно требование для моего проекта, но нет необходимости в достижении решения.