jnlp Pfad

vNeumann

Mitglied
Hallo!
Ich habe mit Java eine Desktop-Anwendung geschrieben, und möchte diese als Demo online als .jnlp starten können. Habe es soweit jetzt auch - mit durchstöbern dieses Forums - geschafft, dass die Applikation startet. Jetzt habe ich nur noch ein Problem: Meine Applikation greift auf verschiedene Ressourcen zu: zum Beispiel auf Bilder, auf .txt-Dateien und auf .ser (verschiedene serialisierte Objekte). Diese werden bei mir jetzt nicht gefunden. Wie kann ich meiner Anwendung sagen, wo die Objekte liegen? Ein kleines Beispiel:

ObjectInputStream objIn = new ObjectInputStream(new BufferedInputStream(new FileInputStream("license.ser")));

Geht das überhaupt?
Vielen Dank für eure Hilfe
vNeumann
 
Moin,

wenn ich Dich richtig verstehe, hast Du also kein Problem mit der JNLP-Datei, sondern mit den Pfadangaben innerhalb der Applikation, oder ? ? ?

In Deinem Beispiel müsste die Datei "license.ser" im selben relativen Pfad liegen, aus dem heraus Du die Applikation startest - oder Du aber Du gibt den Pfad halt absolut an.
Java:
private String strTargetFile = "C:\\DIR_1\\DIR_2\\license.ser";
ObjectInputStream objIn = new ObjectInputStream( new BufferedInputStream( new FileInputStream(strTargetFile) ) );

BTW: die Verschachtelung der drei 'new' in einem Aufruf, scheint spätestens mit einem Java 6-Compilier Probleme zu bereiten. Hier würde ich die einzelnen Objektdeklaration vorziehen und dann jeweils übergeben ......

Gruß
Klaus
 
Guten Morgen Klaus!
Zuerst einmal vielen Dank für deine prompte und vor allem "frühe" Antwort!

Naja, sagen wir es mal so: Die Datei liegt in dem Pfad, aus dem die Applikation raus gestartet wird. Die Applikation funktioniert als Desktop-Anwendung auch einwandfrei (also für den normalen Gebrauch stimmt die relative Pfadangabe).

Wenn ich jedoch die Datei übers WWW mit einer jnlp-Datei starten will, dann wird die Anwendung gestartet, die verschiedenen Libraries werden auch geladen, aber die Anwendung findet dann die Dateinen nicht mehr. Unter anderem auch die obige .ser-Datei. Das selbe gilt auch für die embedded-Derby Datenbank. Muss ich da nicht noch an der Applikation selber noch was verändern?

Danke
vNeumann
 
Moin,

Du rufst also die JNLP selbst auf , um dadurch auf die Anwendung, die irgendwo anders liegt zuzugreifen? ? ?
Oder rufst Du über WebStart eine remote liegende JNLP auf ? ?

Und liegt die Datei in dem Pfad, auf den die JNLP verweist? ? ?

Poste mal den Inhalt den JNLP, vielleicht kommen wir dann weiter?

Gruß
Klaus
 
Hallo! Ich habe eine Webstart.jnlp erstellt. Die ruft eine .jar auf, die im selben Verzeichnis liegt. Was soweit auch kein Problem ist. Das Programm startet auch. Hier meine jnlp

Code:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://www.meiendomain.com/programm" href="Webstart.jnlp">
  <information>
    <title>Mein Programm</title>
    <vendor>vNeumann</vendor>
    <homepage href="http://www.meiendomain.com/programm" />
    <description>A Java Webstart test</description>
    <offline-allowed />
  </information>
  <resources>
    <j2se version="1.6" />
        <jar href="MeinProgramm.jar" />
        <jar href="lib/AbsoluteLayout.jar" />
        <jar href="lib/beansbinding-1.2.1.jar" />
        <jar href="lib/derby.jar" />
        <jar href="lib/derbyLocale_de_DE.jar" />
        <jar href="lib/jxl.jar" />
        <jar href="lib/substance.jar" />
        <jar href="lib/swing-layout-1.0.3.jar" />

  </resources>
  <security>
    <all-permissions />
  </security>
  <application-desc main-class="com.applikationen.meinprogramm.MeinProgramm" />
</jnlp>
 
Hallo,
also, so aus dem Stand fallen mir nur folgende Dinge auf:

Ich nehme mal an, dass Du sichergestellt hast, das Dein Programm im Pfad "http://www.meiendomain.com/programm/" liegt und die genannten LIBs in "http://www.meiendomain.com/programm/lib", richtig

Dann würde ich den <security>-Teil mit den Permissions auf jeden Fall VOR das Tag <resources> schreiben!!

Du kannst ggf. noch versuchen in der zweiten Zeile bei codebase
am Ende ein "/" einzufügen, wenngleich in nicht glaube, dass das
relevant ist!

Vlt. hilft auch diese Seite weiter, an der mich immer orientiere :
http://www.dpunkt.de/java/Programmieren_mit_Java/Deployment/7.html

Gruß
Klaus
 
Hallo Klaus!
Ja, ich habe sichergestellt, dass sich das Programm auch dort befindet, und die Lib's auch. Die werden auch gefunden.

Ich stelle dir jetzt die Codezeilen hin, bei denen mein Programm auf Dateien zugreift, die im gleichen Verzeichnis liegen wie das Programm selbst. So läuft es bislang als "normale" Desktop-Anwendung.

Code:
    private static void loadLicense() {
        try {

            ObjectInputStream objIn = new ObjectInputStream(new BufferedInputStream(new FileInputStream("license.ser")));

            license = (License) objIn.readObject( );
            objIn.close();
        } catch (Exception e) {
            license = new License("non registered owner", "");
        }

    }

Außerdem hab ich auch Probleme, zum auf eine Derby-Datenbank zuzugreifen. Was bislang so funktionierte: (liegt auch im selben Verzeichnis)

Code:
/**
 * Create DatabaseConnection
 */
private void createDBConnection() throws SQLException, ClassNotFoundException {

        String theDbStringExist = "jdbc:derby:db/" + dbName;
         Properties properties = new Properties();
         properties.put("user", "username");
         properties.put("password", "passwort");
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

        if(checkDBExist(dbName)) {
            con = DriverManager.getConnection(theDbStringExist,properties);
            
        } else {
            System.out.println("db n. exists.");
            throw new SQLException();

        }
}

Vieln Dank!
 
Hallo,

ja, aber über Webstart lädst Du doch dann eine aktuelle Version der Applikation von einem Webserver oder so in das Verzeichnis runter, oder nicht ? ? ?

Du musst sicherstellen, dass alle notwendigen Dateien im Startverzeichnis stehen - und wenn Du Webstart nutzt, müssen sie halt in dem Verzeichnis liegen, in dem Du die Verknüpfung aufrufst!

Gruß
Klaus
 
Ja, das hab ich mir auch gedacht.
Bei mir ist folgende Situation: im Verzeichnis liegen
  • Webstart.jnlp
  • Die Anwendung selbst
  • die Dateien die ausgelesen werden sollen
Dann müsste das doch funktionieren. Oder muss ich die Files vielleicht anderst aufrufen?
vNeumann
 
Moin,

verstehe ich das jetzt richtig?
Du rufst Deine Anwendung über Webstart direkt per JNLP-Datei auf, die Verzeichnis "http://www.meiendomain.com/programm" liegt ? ? ?

Hierdurch sollte eigentlich duie Applikation auf den lokalen Rechner, von wo aus Du mit einem Browser zur genannten Webseite gegangen bist, runterladen und im Idealfall eine Verknüpfung auf dem Desktop anlegen (falls nicht, kannst Du es über die Java-Konsole in der Systemsteuerung einstellen)!
Jetzt würde ich mir auf dem Desktop des lokalen Rechners eine Odrner anlegen und dort sowohl diese Verknüpfung als auch die genannten benötigten Dateion reinkopieren.

Wenn Du nun Deine Applikation dur einen Doppeklick auf die zu vor genannte Verknüpfung startest, sorgt der Webstart-Mechanismus dafür, dass nun eine ggf. aktualisierte Version der Applikation von der genannten Webseite geladen wird - oder es wird über den Java-Cache die bisherige Version geladen!

Gruß
Klaus
 

Neue Beiträge

Zurück