WebStart erkennen

EvilHomy

Grünschnabel
Hallo liebe Gemeinde.

Da Webstart ja leider Gottes nicht alles so macht wie eine Application aus einer jar heraus (siehe SplashScreen und Icon) würde ich gerne überprüfen ob die Application mittels WebStart gestartet wurde. Ich denke man sollte das dann in die main der Application implementieren aber ich weiss beim besten Willen nicht wie.
Für jegliche Hilfe bin ich dankbar.

MfG EH.
 
Hallo,

ich kann Dir leider nicht genau sagen, wie es unter Java geht (Befehle, Syntax etc.), aber ich mache sowas ähnliches in meinen C++-Servern!
Dort muss ich gelegentlich schauen, ob eine bestimmte Anwendung im Hintergrund läuft.

Also hole ich mir die aktuelle Prozessliste und durchsuche sie nach dem Eintrag der gesuchten EXE.

Wie gesagt, die konkreten Java-CMDs kenn ich nicht, aber ich hoffe, es war ein guter Denkanstoß :D

Gruß
Klaus
 
Danke für die Idee!

Also soweit ich das verstehe wird WebStart zumindest unter Windows mittels des Prozesses javaws.exe ausgeführt.

Leider sieht das wohlmöglich unter anderen Betriebssystemen anders aus.

Da ich Java nutze, weil es Systemunabhängig funktioniert, möchte ich eigentlich nicht eine Systemabfrage, wenn überhaupt möglich, auf alle möglichen Systeme einbauen.

Oder es ist möglich irgendwie allgemein nach dem WebStart-Prozess zu fragen ohne die systemspezifischen Namen zu benötigen.

Mal sehen, vieleicht gibt es ja noch andere Möglichkeiten.

Es dankt EH.
 
Moin,

richtig, unter WIN ist es die genannte EXE-Datei!
Ob sie unter anderen BS anders heißt, kann ich nicht sagen, da wir es hier nur unter WIN nutzen!

Nur - um zuschauen, ob dieser Prozess läuft, wird es dann wohl nur über den spezifischen Namen in der jeweiligen (wie auch immer gearteten) Prozessliste gehen ....

Gruß
Klaus
 
ich mache es so:

Java:
   public static boolean isWebstartApp()
    {
        String value = System.getProperty("jnlpx.home");
        boolean jnlpApiExists;
        try
        {
            Class.forName("javax.jnlp.BasicService");
            jnlpApiExists = true;
        }
        catch (ClassNotFoundException p_ex)
        {
            jnlpApiExists = false;
        }
        
        return value != null && jnlpApiExists;
    }

klappte bisher immer einwandfrei.

Da Webstart ja leider Gottes nicht alles so macht wie eine Application aus einer jar heraus
naja....es ist auch ne applikation aus nem jar...
was ist den genau (für dich) anders? (bis auf den Security-Kram?)
 
das sieht schon mal vielversprechend aus.

naja....es ist auch ne applikation aus nem jar...
was ist den genau (für dich) anders? (bis auf den Security-Kram?)

Java und besonders Webstart ist für mich doch eher Neuland.
Ich hatte z.B. ein Splash-Screen in meiner Jar mit Hilfe von java 1.6, dieses wurde bei webstart nicht dargestellt. Ähnlich erging es mir mit einem eigenen Programm-Icon anstelle des Java-Icons. Bei beiden Fällen sah es so aus als könnte Java Webstart nichts mit Bildern in der Original-Jar anstellen.
Die Möglichkeit den Splash-Screen über die jnlp-Datei einzubinden finde ich irgendwie unschön. Jeder der diese Datei dann ändert kann seinen eigenen Screen einfügen.
Letzten Endes habe ich jetzt ein selbst geschriebenen Splash-Screen vor der Application und die Möglichkeit mittels 1.6.
Der eigene AWT-Splash-Screen kann leider keine transparenten Fenster und deshalb wollte ich jetzt eine Abfrage einbauen und nur bei Webstart die AWT-Variante starten.
Hoffe mein Gedankengang ist klar.
Vieleicht schiesse ich auch mit Kanonen auf Spatzen aber was Besseres ist mir bis jetzt nicht eingefallen.

Es grüßt EH.
 
SplashScreens habe ich bisher immer selber gebaut, von daher habe ich keine Ahnung wie es mit Webstart und der 1.6er SplashScreen-Klasse aussieht.
Ich arbeite gewöhnlich auch nur mit Swing. Seit 1.6.10 hat sich glaube ich auch etwas mit der Transparenz getan...glaube ich...

...Bei beiden Fällen sah es so aus als könnte Java Webstart nichts mit Bildern in der Original-Jar anstellen.
Bisher hatte ich noch keine Probleme an bestimmten Dateien im JAR heranzukommen.
Ich vermute da machst du evtl. etwas falsch. möglicherweise mit dem Path zum Bild.
 
So nach langer Zeit bin ich nun endlich dazu gekommen die von benhaze beschriebene Variante auszuprobieren.

Leider laufe ich immer in eine Access denied exception.

Code:
java.security.AccessControlException: access denied (java.util.PropertyPermission jnlpx.home read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
	at java.lang.System.getProperty(Unknown Source)
	at potentialFeld.Splasher.isWebstartApp(Splasher.java:21)
	at potentialFeld.Splasher.main(Splasher.java:7)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.sun.javaws.Launcher.executeApplication(Unknown Source)
	at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
	at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
	at com.sun.javaws.Launcher.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Soweit ich bisher gekommen bin scheint irgendein security manager darein zu funken, was mir aber nicht so richtig viel sagt.
Auf jeden Fall hat er Probleme mit der folgenden Zeile:
Code:
String value = System.getProperty("jnlpx.home");

habe ich vieleicht irgendeine Angabe in der jnlp-Datei vergessen
 
Zuletzt bearbeitet:
habe ich vieleicht irgendeine Angabe in der jnlp-Datei vergessen
Möglichwerweise, ja.
Ergänze mal deine jnlp-Datei wie folgt:
(all-permissions)

Code:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="<%= codebaseBuffer.toString() %>" href="<%= request.getRequestURI() %>">
    <information>
        <title>Titel</title>
        <vendor>XXX GmbH</vendor>
        <homepage href="http://www.internet.de"/>
        <description>Test</description>
        <description kind="short">Test</description>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="1.6+" java-vm-args="-Xms64m"/>
        <jar href="client/lib/dom4j-1.6.1.jar" download="eager"/>
        <jar href="client/lib/jaxen-1.1.1.jar" download="eager"/>
        <jar href="client/lib/AbsoluteLayout.jar" download="eager"/>
    </resources>
    <application-desc main-class="de.test.Main">
    </application-desc>
</jnlp>
 
Mit dem Security-tag hab ich versucht und dann gab es einen Hinweis, dass meine Jars nicht signiert sind.
Ich hab keine Ahnung wie das mit dem Signieren funktioniert zudem verwende ich Miglayout, welches eine eigene Jar mitliefert und ob ein nachträgliches Signieren der compilierten Jar funktioniert bezweifle ich.

Ich hab deshalb mal einfach die betreffende Zeile herausgenommen und es funktioniert so wie es soll. Welche Aufgabe hat diese Systemeigenschaft, die da abgefragt wird?

Danke für die Hilfe!
 

Neue Beiträge

Zurück