JApplet parallel zu Java-Applikation entwickeln

Status
Nicht offen für weitere Antworten.

ggirl

Mitglied
Hallo,

ich bin mir nicht sicher, ob meine Frage hierhin oder in die Kategorie "Anfängerfragen" gehört. Da ich ein Problem mit einem JApplet habe, poste ich einmal hier.

Es geht um Folgendes: Ich habe ien Spiel als Java-Applikation entwickelt und möchte jetzt die Möglichkeit haben, dieses als Applikation und als Applet starten zu können.

Habe hierfür 2 neue Klassen angelegt:

Code:
public class ApplikationSpiel extends JFrame

und

Code:
public class AppletSpiel extends JApplet

in diese beiden Klassen wird jeweil ein Objekt meiner Spieloberfläche (Gui extends JPanel) erzeugt, die wiederum viele andere Klassen braucht (überwiegend JPanels), damit das Spiel so aussieht, wie ich mir das vorstelle.

Dazu habe ich eine Klasse ImageLoader angelegt, die mir die Bilder in Abhängigkeit davon, ob das Applet oder die Applikation läuft aus den richtigen Verzeichnissen ziehen soll. Bin nämlich schon mehrere Tage am recherchieren und habe u. a. herausgefunden, dass man für Applets die Bilder anders laden muss. Der Part für die Applikation sieht im ImageLoader so aus (er funktioniert auch):

Code:
/*
 * ImageLoader.java
 */

import javax.swing.*;

public class ImageLoader {
	
	private String pathApplication;
	private String pathApplet;
	private String currentPath;
	
	public ImageLoader(){
		
		pathApplication = "images/"; // Speicherort der Bilder im Programmverzeichnis
		//pathApplet = ???  über getCodeBase() realisieren versuchen
		currentPath = "";
		
	}
	
                // Für alle anderen Klassen, die Bilder haben
	public ImageIcon createImageIcon(String pfad){
		
		// auskommentierter Code war einer von mehreren Versuchen, der so auch nicht geht
                                // if (AppletSpiel){
			
		//    currentPath = pathApplet;
		// }else{
		//    currentPath = pathApplication;
		//}
		
		return new ImageIcon (pathApplication + pfad);
	}
	
	// fuer Klasse ImageButton.java
	public ImageIcon createImageIcon(String pfad, String name){
		
        // return new ImageIcon (currentPath + pfad, name);
		return new ImageIcon ("images/" + pfad, name);
	}


}

alles, was auskommentiert sind Reste von verzweifelten Versuchen, in der Klasse abzufragen, ob die Bilder duchrs Applet oder den JFrame gebraucht werden.

Nach dem ich so viele Postings gelesen habe bin ich ganz verwirrt und weiß garnicht mehr, wie ich mein Vorhaben realisieren sollte. Alles sind nur Bruchstücke und es handelt sich hier um mein erstes Applet. Auch für die Bücher die ich hier rumligen habe ist dieser Fall wohl zu speziell bzw. vielleicht verstehe auch ich die Zusammenhänge nicht ganz richtig...

Ich arbeite im ganzen Spiel wenn ich Bilder brauche mit ImageIcon, da wir in der Vorlesung noch nichts über JAVA 2D gehört haben und dies möglichst deshalb auch nicht verwenden sollten. Wenn ich mal ein Image brauche, hole ich mir dieses über getImage();

Bis jetzt habe ich folgendes unternommen:

Jede Oberfläche, die Bilder benötigt, hat ImageIcons und eine Instanz vom ImageLoader. Über diese rufe ich die Methode createImageIcon auf und übergebe den Namen des Bildes und ggf. den Ordner, wenn es sich um einen Unterordner von "Images/" handelt. (bei Applikation getestet: Das geht so :D )

Mein AppletSpiel und meine ApplikationSpiel haben kein ImageLoader-Objekt, da ich momentan keinen Grund dafür sehe, dass sie dieses bräuchten. Sie sind nur dazu da, eine Instanz der Oberfläche zu erzeugen. Wie kann man denn abfragen, ob jetzt grad die Methode createImageIcon() vom Applet oder vom JFrame gebraucht wird? Wie macht man die beiden Objekte der Klasse ImageLoader bekannt?

Da das Applet meines Wissens ja kein Recht hat, auf lokale Daten der Festplatte zuzugreifen, muss ich - soviel ich gelesen habe - über die URL rankommen. Deshalb komme ich mit dem auskommentierten Codezeilen auch nicht weiter.

Außerdem wäre in dieser Lösung mit dem pathApplet meiner Meinung nach die Pfadangabe auch statisch und ich hätte sie gerne dynamisch über die URL abgefragt. Aber wie mach ich aus der URL einen Pfad? oder ist das keine gute Idee? Ich weiss es nicht...

Ich habe das Gefühl, dass ich gerade viele verschiedene Dinge durcheinanderwürfle und bitte dies zu entschuldigen. Fühle mich doch noch ganz schön als Anfänger diesbezüglich. Hat jemand von euch einen Tipp, wo ich ansetzten könnte, um mein Vorhaben zu realisieren?


Liebe Grüße

*ggirl*
 
G

Gast

Gast
Du könnste im applet sowas machen:


Code:
URL baseurl = applet.getDocumentBase(); // die URL zur HTML-Datei mit der du das Applet startest
Image img = applet.getImage(baseurl , "ordnername/bild.jpg"); // der Ordner muss dann im gleichen verzeichnis liegen wie die HTML-Datei
ImageIcon icon = new ImageIcon(img); // erstellt dein icon
 

ggirl

Mitglied
Danke für deine Antwort!

Der Code erinnert mich stark an den aus meinem Java-Buch, alledings bin ich net drauf gekommen, aus dem image ein ImageIcon zu machen (letzte Zeile)..das hilft mir schon einmal weiter und bringt schon mal ein wenig klarheit in die Sache.

Darf ich dich fragen wie man es schafft, dass die Methode, die die ImageIcons erzeugt mal sich den Pfad über getCodeBase() fürs Applet und mal über den PathApplikation-String für die Applikation holt? Kann man das mit einer if-Abfrage machen? Und wenn ja, wie muss dann die Expresssion aussehen, dass sie true ergibt, wenn die Methode in einer der Unterklassen übers Appet aufgerufen wird?
 

Wildcard

Top Contributor
Mach die Sache einheitlich:
Alle Resourcen kommen in ein jar, dann können sowohl Applikation als auch Applet über getClass().getResource das Bild laden.
 

ggirl

Mitglied
ok, jetzt steig ich grad aus...was ist denn ein jar? :bahnhof:
Werd mal danach recherchieren... das Wort hab ich bis jetzt nur einmal in einem posting gelesen und konnte mir nix darunter vorstellen...werd mal googeln gehen...
 

Wildcard

Top Contributor
Ein jar kann eine Bibliothek sein (wie .so oder .dll), oder ein ausführbares Programm (wie .sh oder .exe)
 
G

Gast

Gast
ein jar ist eigentlich nichts anderes wie ein zip-File, in den du alle deine Sache die zum Programm gehören reinpacken kannst. wenn man möchte kann man das ganze dann noch ausführbar machen (startet beim doppelklick).


ansonsten um auf deine frage zurückzukommen.
Code:
class BilderVerwalten{

  Container c;

  public BilderVerwalten(Container c){
    this.c = c;
  }

  public void ladeBilder(){
    if(c instanceof JFrame){
        ladeApplikationsBilder();
    } 
    else if(c instanceof JApplet){
        ladeAppletBilder();
    }
  }

  ...
}
 

ggirl

Mitglied
Hallo, danke für die Antwort!

Sowas habe ich gesucht

Derzeit rufe ich die die Methode ladeBilder nur in JPanels auf, die von der Klasse Gui instanziiert werden. In meiner Startklasse fürs Applet und für die Applikation erzeuge ich dann so ein Gui-Objekt.

So wie ich es verstehe, muss ich, damit der Code geht, in beiden Startklassen ein Objekt von Bilder erzeugen anlegen und dabei jeweils (this) mit übergeben.

Dann bräuchte ich glaub ich noch glaub ich in beiden Klassen eine Methode, die dann über das BilderVerwalten-Objekt die Methode ladeBilder() aufruft.

Nur was mache ich dann in den JPanels?

In den JPanels-Ableitungen habe ich es bis jetzt so gelöst:


Code:
BilderVerwalten loader;
ImageIcon icon;

...

// im Konstruktor:


icon = loader.ladeBilder("bild.jpg");

Da jetzt den Objekttyp, der das Icon anfragt mitgeben, ist denk ich net sinvoll, da es immer ein JPanel ist.

Kann mir gerade ich so ganz vorstellen, was ich in den den JPanel-Ableitungen jetzt machen muss.

Wenn ich in diesen Klassen jeweils ein Objekt meiner Startklasse fürs Applet und für die Applikation erzeuge um in letztgenannten Klassen dann die Methode auzurufen, die dann die Bilder über das BilderVerwalten-Objekt aufruft, müsste ich ja dann irgendwie auch in den JPanels unterscheiden, aus welcher Klasse (JFrame oder JApplet) ich die Methode zum Bilder laden aufrufe.

Geht sowas überhaupt? Es ist ja erst zur Laufzeit bekannt, ob das Applet oder die Applikation die Gui mit ihren JPanels instanziiert. Wie behandle ich das in den JPanels?


Würde mich sehr drüber freuen, wenn ihr mir hierzu noch einen Tipp geben könntet.

Liebe Grüße *ggirl*
 
G

Guest

Gast
eine möglichkeite wäre das du die klasse BilderVerwalten als singleton schreibst.

Code:
public class BilderVerwalten {

    private static BilderVerwalten instance = null;
    private Container c;

    private BilderVerwalten () {}
   
    public static BilderVerwalten getInstance(){
        if(instance == null){
            instance = new BilderVerwalten ();
        }
        return instance;
    }

    public void setContainer(Container c){
      this.c = c; 
    }


    public ImageIcon getImageIcon(String pfadZumBild){
       ... bild erzeugen ...
       return icon;
    }
}


du musst die klasse dann im japplet oder im jframe erzeuge und kannst sie dann von überall aufrufen.

erzeugen...
Code:
class JApplet/JFrame{

   public konstruktor/init(){
     BildVerwalten bv = BildVerwaltern.getInstance();
     bv.setContainer(this);
   }

}


aus jpanel zugreifen...
Code:
class JPanel{

   public konstruktor/init(){
     BildVerwalten bv = BildVerwaltern.getInstance();
     ImageIcon icon = bv.getImageIcon(irgendeinpfad);
   }

}
 
G

Gast

Gast
nicht jeder möchte alle daten in einen jar-file packen.

das kann auch nachteile haben, weil der jarfile unnötig gross wird und bei jedem programmupdate alle bilder neu vom servergeladen werden, obwohl sie sich vielleicht nicht geändert haben.

wenn er es lieber so lösen möchte, kann er das auch tun, es spricht imo nichts dagegen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T JApplet in Browserfenster maximieren Tools - Maven, Gradle, Ant & mehr 10
A JApplet Form: JPanel dynamisch füllen Tools - Maven, Gradle, Ant & mehr 3
P JApplet mit Look&Feel? Tools - Maven, Gradle, Ant & mehr 8
S Probleme mit Kombination Java JApplet;MySQL;Webserver Tools - Maven, Gradle, Ant & mehr 3
M Probleme mit JApplet Tools - Maven, Gradle, Ant & mehr 20
G JApplet mit Chat Tools - Maven, Gradle, Ant & mehr 2
C JApplet soll beim Aufruf nicht neustarten Tools - Maven, Gradle, Ant & mehr 3
H JApplet von laufendem JApplet starten Tools - Maven, Gradle, Ant & mehr 8
H JApplet läuft zwar korrekt, bleibt aber unsichtbar Tools - Maven, Gradle, Ant & mehr 3
M JApplet funktioniert nicht Tools - Maven, Gradle, Ant & mehr 5
G Problem mit JApplet bzw Applet Tools - Maven, Gradle, Ant & mehr 5
S aus einem JApplet ein Image in separatem JFrame anzeigen Tools - Maven, Gradle, Ant & mehr 10
N Jars in JApplet Tools - Maven, Gradle, Ant & mehr 2
M Unterschiede-Vorteile Applet/JApplet Tools - Maven, Gradle, Ant & mehr 3
D Runnable JApplet mit Bild/Ovals "übermalt" Buttons Tools - Maven, Gradle, Ant & mehr 6
A Tastatureingaben und JApplet Tools - Maven, Gradle, Ant & mehr 2
M eine Frage über JApplet und JMenuBar Tools - Maven, Gradle, Ant & mehr 6
D JApplet & MouseListener Tools - Maven, Gradle, Ant & mehr 5
L Applet oder JApplet Tools - Maven, Gradle, Ant & mehr 10
M JApplet komplett neu zeichnen Tools - Maven, Gradle, Ant & mehr 3
M JApplet läuft in Eclipse, aber nicht in den Browsern Tools - Maven, Gradle, Ant & mehr 7
S JApplet- Komponentenanzeige Tools - Maven, Gradle, Ant & mehr 7
M ein aus einem JApplet gestartetes JFrame schliessen Tools - Maven, Gradle, Ant & mehr 6
A [GUI] [JApplet] [JDialog] Nochmal die Frage zur Modalität un Tools - Maven, Gradle, Ant & mehr 3
K Bild (jpg) in einem JApplet Tools - Maven, Gradle, Ant & mehr 2
D JApplet Tools - Maven, Gradle, Ant & mehr 11
H Maven NetBeans Java Application ohne Manifest-Datei Tools - Maven, Gradle, Ant & mehr 7
B Kleines Werkzeug zum Anzeigen von Mehrfachvererbung mit Interfaces in Java Tools - Maven, Gradle, Ant & mehr 5
D Java Programm veröffentlichen am Besten modular Tools - Maven, Gradle, Ant & mehr 28
H Maven Verbindung Java Projekt und Jenkins Build job Tools - Maven, Gradle, Ant & mehr 21
Q Java Eclipse Fehlermeldung bei Installation Tools - Maven, Gradle, Ant & mehr 3
D Maven Abhängigkeiten überprüfen auf Kompatibilität mit einer anderen Java-Version Tools - Maven, Gradle, Ant & mehr 11
R Webstart Java 11 ohne Web Start Tools - Maven, Gradle, Ant & mehr 5
M Java mit Modulen kompilieren klappt nicht Tools - Maven, Gradle, Ant & mehr 9
R Java mitnehmen Tools - Maven, Gradle, Ant & mehr 14
W Java on Cloud - which Provider Tools - Maven, Gradle, Ant & mehr 0
S Python-Code mit Java ausführen Tools - Maven, Gradle, Ant & mehr 13
B Java auf Smartcards?! Tools - Maven, Gradle, Ant & mehr 9
J Java App im Mac Store veröffentlichen Tools - Maven, Gradle, Ant & mehr 0
M Maven (Java EE, WAR) Eigener Buildschritt - Manipulation von Dateien Tools - Maven, Gradle, Ant & mehr 4
VfL_Freak Desktopverknüpfung über den Java-Cache erstellen Tools - Maven, Gradle, Ant & mehr 0
S New version released: Java Switcher for 1.8.0_112 and Windows x64 only Tools - Maven, Gradle, Ant & mehr 4
S Java 32 Bit and 64 Bit Switcher for Windows XX [64 Bit only] Tools - Maven, Gradle, Ant & mehr 0
F java.lang.ClassNotFoundException auf anderem Rechner Tools - Maven, Gradle, Ant & mehr 0
S Applet Java Testen - Ergebnis wird nicht angezeigt, nur leeres Feld Tools - Maven, Gradle, Ant & mehr 15
T Java Applikation an Clients verteilen Tools - Maven, Gradle, Ant & mehr 5
S Java Web Start wird nicht ausgeführt Tools - Maven, Gradle, Ant & mehr 1
J Applet Java fragt Verzeichnis ab Tools - Maven, Gradle, Ant & mehr 0
J Applet .java.policy und neue Javaversion Tools - Maven, Gradle, Ant & mehr 4
R Maven woher gewusst, dass mein Java-Code commons-lang braucht? Tools - Maven, Gradle, Ant & mehr 0
O Applet Selbstsignierte Applets in Java 7 Update 51 Tools - Maven, Gradle, Ant & mehr 19
M Was muss man installiert haben damit Java Applets im Browser gehen Tools - Maven, Gradle, Ant & mehr 2
T ClassNotFound erfordert ständiges Löschen des Java-Cache. Tools - Maven, Gradle, Ant & mehr 2
P Applet Java Applet läuft im Browser nicht mehr (HTTPClient - NoClassDefFoundError) Tools - Maven, Gradle, Ant & mehr 3
B Webstart Java Webstart hängt sich beim Laden auf! Tools - Maven, Gradle, Ant & mehr 8
T Daten per POST-Methode aus Java-Applet nach php-Script senden Tools - Maven, Gradle, Ant & mehr 3
ChrisX Java im Autostart sinnvoll? Tools - Maven, Gradle, Ant & mehr 4
HaukeG Maven Java Web-Application in Eclipse - Abhängigkeiten zwischen den Projekten Tools - Maven, Gradle, Ant & mehr 10
F [Java Webstart] Webspace gesucht... Tools - Maven, Gradle, Ant & mehr 6
M Java Application startet bei verschiedenen JRE's nicht Tools - Maven, Gradle, Ant & mehr 7
B Wie kann man unter Windows 7 file types mit Java Applikationen verknüpfen? Tools - Maven, Gradle, Ant & mehr 5
D Java mit .bat starten Tools - Maven, Gradle, Ant & mehr 1
S Java Applikation als Windows Service einrichten Tools - Maven, Gradle, Ant & mehr 23
C Aufruf eines Java Programms mittels ant MIT Parametern Tools - Maven, Gradle, Ant & mehr 2
P Java Applikation auf Server Tools - Maven, Gradle, Ant & mehr 7
schlingel Applet Java-Sicherheitswarnung wegen alter JRE-Version Tools - Maven, Gradle, Ant & mehr 13
S Applet Applet mit C# öffnen: java.lang.SecurityException: Permission denied (WinXP) Tools - Maven, Gradle, Ant & mehr 8
W CVS Keine Verbindung zu cvs.dev.java.net möglich Tools - Maven, Gradle, Ant & mehr 5
E Java Applet bearbeiten Tools - Maven, Gradle, Ant & mehr 8
J Webstart Grenzen von Java Webstart? Tools - Maven, Gradle, Ant & mehr 2
B Buckminster: Plugin Version in Java source File einfügen Tools - Maven, Gradle, Ant & mehr 4
T Ant ant-variable aus Java Tools - Maven, Gradle, Ant & mehr 4
F Ant ANT javac class-Dateien von entfernten JAVA-Klassen löschen Tools - Maven, Gradle, Ant & mehr 11
J Java Webstart beschleunigen und Verlauf anzeigen Tools - Maven, Gradle, Ant & mehr 3
H Java Applet Problem beim einbinden in HTML Tools - Maven, Gradle, Ant & mehr 3
L PHP + Java Applet Kommunikation Tools - Maven, Gradle, Ant & mehr 9
nabla Einbinden von externen Java und C Bibliotheken Tools - Maven, Gradle, Ant & mehr 5
G Java-Applet Probleme beim Browser Tools - Maven, Gradle, Ant & mehr 14
A Java-Applet Sandbox deaktiviren? Tools - Maven, Gradle, Ant & mehr 2
B Java-Applet geht nicht (auf dem Webserver) Tools - Maven, Gradle, Ant & mehr 9
I In Java Applets drucken Tools - Maven, Gradle, Ant & mehr 2
D Java Webstart startet .jar file nicht Tools - Maven, Gradle, Ant & mehr 13
S Java Applet per Klick starten? Tools - Maven, Gradle, Ant & mehr 6
U Java Webstartproblem ab Version 1.6_11 Tools - Maven, Gradle, Ant & mehr 7
S Java Ant per Console starten Tools - Maven, Gradle, Ant & mehr 3
M Java Applet - enforce use of older JRE Tools - Maven, Gradle, Ant & mehr 3
N Wie Java-Programm zu Applet machen?! Tools - Maven, Gradle, Ant & mehr 2
M Java Swing Anwendung als Webanwendung Tools - Maven, Gradle, Ant & mehr 6
Raidri Java Programme installieren Tools - Maven, Gradle, Ant & mehr 5
S Java Webstart Tools - Maven, Gradle, Ant & mehr 3
V applet Java 1.6 -> 1.5 Problem ... wie mit Ant zu lösen? Tools - Maven, Gradle, Ant & mehr 7
E Java Applet - Double Buffering Problem (Flackern) Tools - Maven, Gradle, Ant & mehr 6
S Java-Applet Steuerung IO Karte am Drucker-Port Tools - Maven, Gradle, Ant & mehr 4
T Java Anwendung installieren Tools - Maven, Gradle, Ant & mehr 7
T Statistiken zur Verbreitung von Java Tools - Maven, Gradle, Ant & mehr 5
D Java-Anwendung mit Bildern (JPG) verfügbar machen Tools - Maven, Gradle, Ant & mehr 7
F Kleines Java-Programm geschrieben, 30 Dateien? Tools - Maven, Gradle, Ant & mehr 16
T Applet soll Java Programm starten Tools - Maven, Gradle, Ant & mehr 2
P Java-Applet funktioniert unter WINXP nicht Tools - Maven, Gradle, Ant & mehr 2
N Java 1.6 Applet auf älteren Versionen ausführbar? Tools - Maven, Gradle, Ant & mehr 4

Ähnliche Java Themen

Neue Themen


Oben