Hallo,
ich habe ein Problem.
Und zwar habe ich mit Java unter Nutzung der swing-Komponenten ein kleines Schere-Stein-Papier-Spielchen gemacht.
Der Benutzer hat die Wahl zwischen 3 Buttons, die jeweils mit einem Bildchen (ImageIcon) einer Schere, eines Steins und eines Papiers versehen sind (.png). Der PC generiert eine Zahl von 0 - 2 und je nachdem wählt er auch zwischen Schere, Stein und Papier.
Die Auswahl des Spielers und des Computers wird in einem seperaten JPanel angezeigt. Auch hierfür werden ImageIcons verwendet.
Unter BlueJ und Eclipse funktioniert es prächtigst. Die Bilder sind da, und auch da wo sie sein sollten. Aber nach dem Export in ein .jar-File werden diese beim Ausführen einfach nicht mehr angezeigt.
Jetzt hab ich das ganze in ein Applet umgeschrieben und es passiert dasselbe. Im Applet Viewer bei BlueJ und Eclipse funktioniert es zwar, wenn ich es im Browser teste werden auch hier wieder die ImageIcons nicht angezeigt (das .jar-File für das Applet ist signiert).
Ich habe gegoogelt und verschiedene Sachen durchprobiert.
FilePermission, ClassLoader.getSystemResource(), MediaTracker,...
Eclipse hat auch ein java.policy.applet erstellt, was laut Google-Ergebnissen auch was bringen sollte, was es aber nicht tut (es befindet sich ebenfalls im .jar-File).
Die Pfade zu den Dateien sind alle richtig, es befindet sich alles im selben Ordner.
Ich hoffe, dass ihr mir weiterhelfen könnt.
Hier der Code des Applets:
Der Code ist halt nicht der schönste, da ich es aus nem JFrame geändert hab.
ich habe ein Problem.
Und zwar habe ich mit Java unter Nutzung der swing-Komponenten ein kleines Schere-Stein-Papier-Spielchen gemacht.
Der Benutzer hat die Wahl zwischen 3 Buttons, die jeweils mit einem Bildchen (ImageIcon) einer Schere, eines Steins und eines Papiers versehen sind (.png). Der PC generiert eine Zahl von 0 - 2 und je nachdem wählt er auch zwischen Schere, Stein und Papier.
Die Auswahl des Spielers und des Computers wird in einem seperaten JPanel angezeigt. Auch hierfür werden ImageIcons verwendet.
Unter BlueJ und Eclipse funktioniert es prächtigst. Die Bilder sind da, und auch da wo sie sein sollten. Aber nach dem Export in ein .jar-File werden diese beim Ausführen einfach nicht mehr angezeigt.
Jetzt hab ich das ganze in ein Applet umgeschrieben und es passiert dasselbe. Im Applet Viewer bei BlueJ und Eclipse funktioniert es zwar, wenn ich es im Browser teste werden auch hier wieder die ImageIcons nicht angezeigt (das .jar-File für das Applet ist signiert).
Ich habe gegoogelt und verschiedene Sachen durchprobiert.
FilePermission, ClassLoader.getSystemResource(), MediaTracker,...
Eclipse hat auch ein java.policy.applet erstellt, was laut Google-Ergebnissen auch was bringen sollte, was es aber nicht tut (es befindet sich ebenfalls im .jar-File).
Die Pfade zu den Dateien sind alle richtig, es befindet sich alles im selben Ordner.
Ich hoffe, dass ihr mir weiterhelfen könnt.
Hier der Code des Applets:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SSPApplet extends JApplet{
//private static JFrame frame = new JFrame();
private static JButton schereB, steinB, papierB;
//private static JMenuItem start;
private static JPanel panelMitte = new JPanel();
private static JLabel textLabel = new JLabel();
private static JLabel textPLLabel = new JLabel();
private static JLabel textPCLabel = new JLabel(" Computer");
private static JLabel bildPCLabel = new JLabel("PC-Bild");
private static JLabel bildPLLabel = new JLabel("PL-Bild");
private static int zahl1, zahl2;
private static ImageIcon bildPC, bildPL;
private static ImageIcon schere = new ImageIcon("schere.png");
private static ImageIcon stein = new ImageIcon("stein.png");
private static ImageIcon papier = new ImageIcon("papier.png");
public void init(){ //Alles, was mit Menüleiste und Frame zu tun hat, wurde wegkommentiert.
//Dings definieren und so ANFANG
JPanel panelText = new JPanel();
JPanel panelButton = new JPanel();
Container inhalt;
FlowLayout panelBL = new FlowLayout(FlowLayout.CENTER);
//ENDE
//Menü ANFANG
//JMenuBar menu = new JMenuBar();
//datei
//JMenu datei = new JMenu("Datei");
//start = new JMenuItem("Neues Spiel");
//JMenuItem beenden = new JMenuItem("Beenden");
//mStart(start);
//mBeenden(beenden);
//datei.add(start);
//datei.add(beenden);
// /datei
//menu.add(datei);
//Menü ENDE
textLabel.setText("<html><body><font size=\"2\"> "
+ "<h2 style=\"color:red\"><center>Willkommen</center></h2>"
+ "beim lustigen Spiel Schere-Stein-Papier!"
+ "<br>Klicken Sie auf ein Bild.</body></html>");
schereB = new JButton("", schere);
steinB = new JButton("", stein);
papierB = new JButton("", papier);
//schereB.setEnabled(false);
//steinB.setEnabled(false);
//papierB.setEnabled(false);
buttonM(schereB, 1);
buttonM(steinB, 2);
buttonM(papierB, 3);
panelText.add(textLabel);
panelButton.setLayout(panelBL);
panelButton.add("South", schereB);
panelButton.add("South", steinB);
panelButton.add("South", papierB);
inhalt = getContentPane();
inhalt.setLayout(new BoxLayout(inhalt, BoxLayout.Y_AXIS));
inhalt.add("North", panelText);
inhalt.add("Center", panelMitte);
inhalt.add("South", panelButton);
//frame.setJMenuBar(menu);
setVisible(true); //(frame.)
//frame.setAlwaysOnTop(true);
//frame.setTitle("SSP - Schere Stein Papier");
setSize(400,250); //(frame.)
//frame.setIconImage(new ImageIcon("icon.png").getImage());
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//private static JFrame namensFrame = new JFrame();
//private static JTextField namensFeld = new JTextField(20);
private static String namePL = " Spieler ";
public static void buttonM(JButton x, final int z){
x.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent y){
panelMitte.remove(bildPLLabel);
panelMitte.remove(bildPCLabel);
switch(z){
case 1: zahl1 = z; bildPL = schere; break;
case 2: zahl1 = z; bildPL = stein; break;
case 3: zahl1 = z; bildPL = papier; break;
}
bildPLLabel = new JLabel(bildPL);
zahl2 = (int)(Math.random() * 3);
while(zahl2 == 3){
zahl2 = (int)(Math.random() * 3);
}
switch(zahl2){
case 0: bildPC = schere; break;
case 1: bildPC = stein; break;
case 2: bildPC = papier; break;
}
bildPCLabel = new JLabel(bildPC);
textPLLabel.setText(namePL);
panelMitte.add(textPLLabel); //Spielername wird zum Panel hinzugefügt
panelMitte.add(bildPLLabel); //Danach die Auswahl
panelMitte.add(bildPCLabel); //Danach die Auswahl des Computers
panelMitte.add(textPCLabel); //Dann der Computername
checkErfolg();
}
});
}
private static int gewonnenPL = 0;
private static int verlorenPL = 0;
private static String textPL;
public static void checkErfolg(){
//Hier wird überprüft, ob man gewonnen oder verloren hat
if(zahl1 == 1 && zahl2 == 2){
textPL = namePL + " gewinnt! ";
gewonnenPL++;
}
else{
if(zahl1 == 1 && zahl2 == 1){
textPL = namePL + " verliert! ";
verlorenPL++;
}
else{
if(zahl1 == 1 && zahl2 == 0){
textPL = " Unentschieden. ";
}
else{
if(zahl1 == 2 && zahl2 == 2){
textPL = namePL + " verliert! ";
verlorenPL++;
}
else{
if(zahl1 == 2 && zahl2 == 1){
textPL = " Unentschieden. ";
}
else{
if(zahl1 == 2 && zahl2 == 0){
textPL = namePL + " gewinnt! ";
gewonnenPL++;
}
else{
if(zahl1 == 3 && zahl2 == 2){
textPL = " Unentschieden. ";
}
else{
if(zahl1 == 3 && zahl2 == 1){
textPL = namePL + " gewinnt! ";
gewonnenPL++;
}
else{
if(zahl1 == 3 && zahl2 == 0){
textPL = namePL + " verliert! ";
verlorenPL++;
}
}
}
}
}
}
}
}
}
//Hier wird dann angezeigt, wie oft man gewonnen/verloren hat
textLabel.setText("<html><body>" + textPL + "<br>" + "Gewonnen: " + gewonnenPL + " Verloren: " + verlorenPL + "</body></html>");
}
}