6 Stimmen

Java Webstart funktioniert offline nicht (NoRouteToHostException/UnknownHostException)

Ich möchte meine Webstart-App/jnlp so konfigurieren, dass sie, wenn keine Internetverbindung verfügbar ist, aus dem Cache gestartet wird. Wenn ich jedoch die Verbindung zum Internet trenne, erhalte ich immer eine NoRouteToHostException- oder UnknownHostException-Ausnahme, trotz der unten stehenden Konfiguration.

Ich habe die Offline-erlaubt und Update-Tags/Attribute richtig eingestellt; ich kann den Grund nicht finden, warum Webstart immer noch versucht, den Host zu suchen. Ich habe auf jeden Fall die App von meinem letzten Start im Cache, als ich verbunden war.

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="6.0+" codebase="http://cms.mydomain.com/sync/" href="myAppSync.jnlp">

<information>
    <title>My App Sync</title>
    <vendor>My Company</vendor>
    <homepage href="http://www.myapp.com/"/>
    <description>Sync application for My App</description>
    <icon href="ATTico.png"/>        

    <!-- allow app to run without Internet access -->
    <offline-allowed/>

    <shortcut online="true">          
      <desktop/>
      <!-- create menu item for this app under the major heading 'My App' -->
      <menu submenu="My App"/>
    </shortcut>

</information>

<security>
    <all-permissions/>
</security>

<update check="timeout" policy="always" />

<resources>
    <java version="1.6*" href="http://java.sun.com/products/autodl/j2se"/>
    <jar href="lib/myAppSync.jar" />
    <jar href="lib/apache-mime4j-0.6.jar" />
    <jar href="lib/commons-logging-1.1.1.jar" />
    <jar href="lib/commons-codec-1.3.jar" />
    <jar href="lib/httpclient-4.0.1.jar" />
    <jar href="lib/httpcore-4.0.1.jar" />
    <jar href="lib/httpmime-4.0.1.jar" />
    <jar href="lib/swingx-1.6.jar" />
    <jar href="lib/swingx-beaninfo-1.6.jar" />        
</resources>

<application-desc main-class="com.myapp.sync.forms.Main"/>

</jnlp>

Fehlerprotokoll:

java.net.NoRouteToHostException: No route to host: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source)
at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source)
at com.sun.deploy.net.DownloadEngine.isUpdateAvailable(Unknown Source)
at com.sun.deploy.net.DownloadEngine.isUpdateAvailable(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadJarFiles(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source)
at com.sun.javaws.Launcher.downloadResources(Unknown Source)
at com.sun.javaws.Launcher.prepareLaunchFile(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

java.net.UnknownHostException: cms.mydomain.com
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source)
at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source)
at com.sun.deploy.net.DownloadEngine.isUpdateAvailable(Unknown Source)
at com.sun.deploy.net.DownloadEngine.isUpdateAvailable(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadJarFiles(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source)
at com.sun.javaws.Launcher.downloadResources(Unknown Source)
at com.sun.javaws.Launcher.prepareLaunchFile(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

3voto

Mathias Conradt Punkte 28087

Ich habe eine Lösung gefunden, indem ich javaws von der Kommandozeile aus mit dem Parameter -offline aufrufe, aber ich finde es seltsam, dass dies notwendig ist, und frage mich, warum das System nicht automatisch erkennen kann, dass ich offline bin, und daher bei der Prüfung einen Timeout verursacht und die Anwendung aus dem Cache startet, wie in meinem jnlp definiert.

javaws -offline myApp.jnlp

0voto

Emmanuel Bourg Punkte 9272

Dies kann erreicht werden durch die Verwendung von <update check="background"/> Allerdings werden Updates nicht mehr sofort heruntergeladen, wenn sie verfügbar sind, sondern es ist ein zweiter Start erforderlich, was ärgerlich ist.

Das sieht wirklich nach einem Fehler in Java Web Start aus, <update check="timeout"/> sollte nicht verhindern, dass die Anwendung startet, wenn die Verbindung zum Server unterbrochen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X