Applet Applet zu JavaWebStart migrieren - simples sample geht nicht

LokiA

Mitglied
Hi

Ich will ein Applet auf JavaWebStart migrieren, und habe mir daher ein einfaches Beispiel zum testen gesucht:
https://docs.oracle.com/javase/tutorial/deployment/applet/examplesIndex.html
Habe das Dynamic Tree Demo applet gewählt und wollte damit beginnen zu Arbeiten.

Nach diesem Guid von Oracle versuche ich vor zu gehen: https://docs.oracle.com/javase/9/de...DPG-GUID-1F95EBB3-D5CB-434A-B069-2261900738F5

Aber da Tauchen viele Fragen auf, die einfach beim guide ignoriert werden.
Wenn ich eine main methode nutze zum starten ist diese statisch
-> ich muss also die applet class instanziieren und init aufrufen ... dann sehe ich aber das Applet nicht ...
In der Java Console werden die output lines aber angezeigt.
Unten die einzigen zwei Sachen die geändert wurden (main in der applet classe + JNLP)

Hat da jemand Ideen?

Hier was ich in der applet classe gemacht haben:
(die main Methode eingefügt, und die print lines)
Java:
/*
* Copyright (c) 1995, 2009, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
 ... siehe link oben
*/
package appletComponentArch;

import javax.swing.JApplet;
import javax.swing.SwingUtilities;

public class DynamicTreeApplet extends JApplet {

    public static void main(String[] args) {
        System.out.println("Hello, World");
        DynamicTreeApplet dynamicTreeApplet = new DynamicTreeApplet();
        dynamicTreeApplet.init();
    }

    //Called when this applet is loaded into the browser.
    public void init() {
        System.out.println("init(): in");

        //Execute a job on the event-dispatching thread; creating this applet's GUI.
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    createGUI();
                }
            });
        } catch (Exception e) {
            System.err.println("createGUI didn't complete successfully");
        }
        System.out.println("init(): out");
    }
   
    /**
     * Create the GUI. For thread safety, this method should
     * be invoked from the event-dispatching thread.
     */
    private void createGUI() {
        System.out.println("createGUI(): in");
        //Create and set up the content pane.
        DynamicTreePanel newContentPane = new DynamicTreePanel();
        newContentPane.setOpaque(true);
        setContentPane(newContentPane);
        System.out.println("createGUI(): out");
    }       
}

zum Starten verwende ich ein JNLP (habe das original angepasst und applet-desc durch application-desc ersetzt, damit eben JWS und nicht applet genutzt wird)

HTML:
<jnlp spec="1.0+" codebase="" href="">
    <information>
        <title>Dynamic Tree Demo JWS</title>
        <vendor>Dynamic JWS</vendor>
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.7+"
              href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="DynamicTreeDemo.jar" main="true" />

    </resources>
    <application-desc
         name="Dynamic Tree Demo JWS"
         main-class="appletComponentArch.DynamicTreeApplet"
         width="300"
         height="300">
     </application-desc>
    <update check="always" policy="always"/>
</jnlp>

PS: wenn wer einen Besseren guide zur Migration kennt, oder ein Projekt, bei dem man Java und JWS Version des Codes sieht bin ich dankbar.
 
Ich zeige dir jetzt wie man eine funktionierende WebStart-Anwendung erstellt (jre1.8.0_131).
Angenommen du hast das folgende Java-Programm, das ein Schachbrett (ohne Figuren) anzeigt:

Java:
package de.hrw.schachbrett;

import java.awt.EventQueue;
import java.awt.*;
import javax.swing.*;

/**
 * Diese Klasse stellt die ausfuehrbare Klasse dar. Sie enthaelt die
 * main-Methode.
 *
 */

public class Hauptprogramm {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    @SuppressWarnings("unused")
                    Hauptfenster hauptfenster = new Hauptfenster();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

}

/**
 * Diese Klasse stellt das Hauptfenster dar. Das Hauptfenster erstellt eine
 * Instanz der der Klasse Spielflaeche.
 *
 */

class Hauptfenster extends JFrame {
    private static final long serialVersionUID = 1L;
    private int anzahlZeilen = 10;
    private int anzahlSpalten = 10;
    private Spielfeld spielfeld;

    // Konstruktor
    public Hauptfenster() {

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        this.setTitle("Schachbrett");

        // Die Fenstergroesse soll nicht veraenderbar sein.
        this.setResizable(false);

        this.spielfeld = new Spielfeld(anzahlZeilen, anzahlSpalten);

        this.add(this.getSpielfeld(), BorderLayout.CENTER);

        this.pack();

        // Position bestimmen
        this.setLocationRelativeTo(null);

        // JFrame sichtbar machen.
        this.setVisible(true);

    }

    public Spielfeld getSpielfeld() {
        return spielfeld;
    }

    public void setSpielfeld(Spielfeld spielfeld) {
        this.spielfeld = spielfeld;
    }

}

/**
 * Diese Klasse stellt das Spielfeld dar. Die Klasse enthaelt schachbrettartige
 * Labels. Dazu benutzt die Spielflaeche ein GridLayout.
 *
 */

class Spielfeld extends JPanel {

    private static final long serialVersionUID = 1L;
    private JLabel schachbrett[][];

    // Konstruktor
    public Spielfeld(int anzahlZeilen, int anzahlSpalten) {

        this.setLayout(new GridLayout(anzahlZeilen, anzahlSpalten));

        this.schachbrett = new JLabel[anzahlZeilen][anzahlSpalten];

        for (int zeile = 0; zeile < anzahlZeilen; zeile++) {
            for (int spalte = 0; spalte < anzahlSpalten; spalte++) {
                schachbrett[zeile][spalte] = new JLabel();
                schachbrett[zeile][spalte].setPreferredSize(new Dimension(50, 50));
                // zeile besitzt geraden Wert.
                if (zeile % 2 == 0) {
                    // Wenn spalte einen ungeraden Wert besitzt, soll das JLabel
                    // schwarz sein. Anderenfalls soll es weiss sein.
                    if (spalte % 2 == 0) {
                        schachbrett[zeile][spalte].setBackground(Color.BLACK);
                    } else {
                        schachbrett[zeile][spalte].setBackground(Color.WHITE);
                    }
                    // zeile besitzt ungeraden wert.
                }
                // zeile besitzt einen ungeraden Wert.
                else {
                    // Wenn spalte einen geraden wert besitzt, soll das JLabel
                    // weiss sein. Anderenfalls soll es schwarz sein.
                    if (spalte % 2 == 0) {
                        schachbrett[zeile][spalte].setBackground(Color.WHITE);
                    } else {
                        schachbrett[zeile][spalte].setBackground(Color.BLACK);
                    }
                }
                // Das JLabel schachbrett soll alles darunterliegende
                // ueberdecken.
                schachbrett[zeile][spalte].setOpaque(true);
                this.add(schachbrett[zeile][spalte]);
            }
        }
        this.setVisible(true);
    }
}

Danach in Eclipse:
Datei -> Export -> Runnable JAR File

Damit erstelle ich die Datei Schachbrett.jar. Diese lade ich nun auf meinem Webserver unter html/Schachbrett hoch.
http://weingartenvideos.de/Schachbrett/Schachbrett.jar

Nun erstelle ich die Datei Schachbrett.jnlp und fülle sie mit folgendem Inhalt:

HTML:
<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File fuer Schachbrett -->
<jnlp spec="1.0+" codebase="http://weingartenvideos.de" href="Schachbrett/Schachbrett.jnlp">
    <information>
        <title>Schachbrett</title>
        <vendor>Erich</vendor>
        <homepage href="http://weingartenvideos.de/index.html"/>
        <description>Schachbrett</description>
        <description kind="short">Eine swing-Anwendung</description>
        <offline-allowed/>
    </information>
    <security>
    </security>
    <resources>
        <j2se version="1.3+"/>
        <jar href="Schachbrett/Schachbrett.jar"/>
    </resources>
    <application-desc main-class="de.hrw.schachbrett.Hauptprogramm"/>
</jnlp>

Jetzt lade ich die Datei auf meinem Webserver unter html/Schachbrett hoch.

Dann Windows-Taste -> Java konfigurieren -> Sicherheit -> Siteliste bearbeiten -> Hinzufügen -> http://weingartenvideos.de

Nun kann die jnlp-Datei ausgeführt werden:
http://weingartenvideos.de/Schachbrett/Schachbrett.jnlp
 
Zuletzt bearbeitet:
Angenommen du hast das folgende Java-Programm, das ein Schachbrett (ohne Figuren) anzeigt:
Aber das ist genau eine falsche Annahme.
Ich will ja eine richtige Migration machen - und die scheitert - es ist das Problem von Applet zu JWS ...
daher hab ich ja auch ein simples Beispiel gewählt um es einfach zu testen.
Eine neue Anwendung (die nicht auf Applet basiert) habe ich auch schon mal so starten können.

Schonmal die Migration versucht?

(was vl auch noch interessant ist wenn das JNLP von einem Server kommt, muss der ggf konfiguriert werden, damit der mime Type unterstützt wird)
 

Neue Themen


Zurück
Oben