Прогресс загрузки апплета в jnlp с дескриптором апплета и в javascript - PullRequest
3 голосов
/ 14 апреля 2011

У меня есть апплет WebStart, который я развертываю, используя скрипт deployJava.Файл jnlp выглядит так:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="" href="launch.jnlp" spec="1.0+">
    <information>
        <title>someApp</title>
        <vendor>someCompany</vendor>
        <homepage href="http://www.someCompanysWebsite.net"/>
        <description>someDescription</description>
        <description kind="short">someShortDescription</description>
    <offline-allowed/>
    </information>
<update check="background"/>
<security>
<all-permissions/>
</security>
    <resources>
<j2se version="1.5+"/>
<jar href="mainJar.jar" main="true"/>


<jar href="lib1.jar"/>
<jar href="lib2.jar"/>
<jar href="lib3.jar"/>
<jar href="platform.jar"/>
<jar href="plugin.jar"/>
<jar href="slf4j-api-1.6.1.jar"/>
<jar href="slf4j-simple-1.6.1.jar"/>
</resources>
    <applet-desc height="1" main-class="com.companyName.applet.appletClass" name="appletName" width="1">

    </applet-desc>
</jnlp>

Как видите, мой апплет имеет размер 1x1, поэтому я не хочу ничего с ним отображать.Он просто служит для раскрытия некоторых java-методов в javascript.Поэтому, если я сделаю вызов javascript, например,

//javascript code
var applet = document.getElementById('appletName');

, я получу действительный дескриптор апплета и смогу вызывать его методы в javascript следующим образом:

 //javascript code
    applet.doStuff();

Конечно, у каждого апплета есть определенный метод isActive (), поэтому в моем коде JavaScript я могу проверить, как апплет полностью загружен:

    //javascript code
    function isFullyLoaded()
    {
      if ( !applet.isActive() ){
         setTimeout('isFullyLoaded()',1000);
      }
      else 
      {
         //do nice stuff requiring the applet is loaded
      }
    }

Однако, поскольку загрузка апплета может занятьв то время как я хотел бы иметь индикатор выполнения его загрузки.Беглый взгляд на Sun (или Oracle, если вы так склонны) показывает это: http://download.oracle.com/javase/tutorial/deployment/applet/customProgressIndicatorForApplet.html

Однако это подразумевает, что я хочу показать полосу загрузки или что-то еще, когда апплет загружается.Мне не нравится внешний вид апплета, и поэтому я просто хочу опрашивать загрузку апплета с помощью javascript, например, через некоторый промежуток времени:

//javascript code
alert(applet.getLoadingProgress());

Что мне делать и нужно ли изменить объявление jnlp или что-то в этом роде.Любые указатели или комментарии будут оценены.Обратите внимание, что я не хочу пользовательский индикатор выполнения, а просто структуру, чтобы я мог опрашивать прогресс с использованием JavaScript во время загрузки.

Приветствия.

Редактировать: @amol Я приведу к вашемуОбратите внимание, что развернутые апплеты и приложения JNLP во время их загрузки вызывают общий метод метода класса DownloadServiceListener (java.net.URL url, версия java.lang.String, long readSoFar, long total, int totalPercent) всякий раз, когда требуется один из jar-файлов.скачал.Знание общего количества банок и количества банок, которые еще предстоит загрузить, послужит прекрасным индикатором прогресса.Я также хотел бы обратить ваше внимание на то, что если вы отладите развертывание JNLP, вы увидите, что эти методы вызываются и регистрируются как события сетевого уровня.Итак, мой вопрос заключается в том, как освоить эти методы с помощью javascript, чтобы я мог получить некоторую оценку прогресса, так как я не хочу, чтобы пользователь смотрел на консоль java для оценки прогресса.Я не хочу также показывать загрузчик с неопределенным прогрессом, так как это легко реализовать, но без практического использования.

Ответы [ 3 ]

3 голосов
/ 15 апреля 2011

Я не уверен, как опросить как таковой, но подход, который я использовал в прошлом для достижения того, что вы описываете, заключается в следующем -

  • при загрузке апплета (в моем случае Я обычно вставляю соответствующий HTML в DOM по нажатию кнопки или что-то), покажите свой javascript / html специфическая загрузка индикатор.
  • Когда апплет загружается, он вызывает метод javascript. Теперь JS знает, что апплет полностью загружен, снимает индикатор загрузки и выполняет дальнейшую связь JS-> апплета и т. Д.

(Отображение определенного индикатора выполнения невозможно при использовании этого подхода. Но универсальный индикатор загрузки, маскирующий все тело HTML или неопределенный индикатор выполнения, очень возможен и легко реализуется)

3 голосов
/ 08 мая 2011

В документации с сайта Oracle, которую вы разместили (http://download.oracle.com/javase/tutorial/deployment/applet/customProgressIndicatorForApplet.html),, апплет вызывает нижеприведенную функцию, чтобы указать ее прогресс, которая затем соответствующим образом обновляет интерфейс апплета и индикатор выполнения.

public void progress(URL url, String version, long readSoFar,
                 long total, int overallPercent) {        
  // check progress of download and update display
  updateProgressUI(overallPercent);

}

Полагаю, вы можете просто заменить вызов на updateProgressUI(overallPercent) некоторым вызовом функции Javascript, которая обновляет индикатор прогресса на веб-странице.

Проверьте это и дайте нам знать, если это возможно.

1 голос
/ 14 апреля 2011

Мне не нравится внешний вид апплета ..

Измените его, используя атрибут 'image' .

...