Jar无法打开(在Eclipse中运行正常)

时间:2015-04-02 19:43:40

标签: java eclipse jar

所以我遇到了一个问题:我有一个小的GUI项目,我正在为了好玩而做,它在Eclipse中运行良好,没有错误,一切正常。

但是当我将它导出到一个可运行的Jar时,它将不再起作用了。基本上没有任何东西显示,甚至没有JFrame。 我尝试从其他项目制作jar并运行正常,因此我的Java(Java JRE 8v40)应该没有任何问题。

以下是您的相关代码(评论为德语,如果有不明之处,请询问):

我的主要方法

package paket;

import javax.swing.JFrame;

public class PokeMain {
    static int breite = 500;
    static int hoehe = 500;
    static PokeGui fenster;

    public static void main(String[] args) {
        fenster = new PokeGui();
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setResizable(true);
        fenster.setSize(breite, hoehe);
        fenster.setLocationRelativeTo(null);
        PokeGui.fight.requestFocus();//Fokus am Anfang
        fenster.requestFocusInWindow();//Fenster soll fokussierbar sein
        fenster.addKeyListener(new KeyHandler());
        fenster.setVisible(true);
    }

    public static void getFocus() {//sorgt dafuer, dass der Fokus auch nach Buttonklicks wieder im Fenster landen kann
        fenster.requestFocus();
    }
}

我的整个GUI级

package paket;
import java.awt .*;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.swing .*;

public class PokeGui extends JFrame {
    static JPanel gesamtPanel, unteresPanel, aktionPanel, infoPanel, attackenPanel;//Container
    static JButton fight, bag, team, run;//Aktionen waehrend eines Kampfes
    static JButton attacke1, attacke2, attacke3, attacke4;
    BufferedReader br;//zum Lesen/Schreiben von Dateien
    static JProgressBar hpBar1, hpBar2;
    static JTextArea infoAnzeige;//einziges Element im infoPanel
    JLabel hp;
    Font schrift;
    PaintKampf pk;//Objekt der Klasse
    static int hp1 = 20, hp2 = 20;//1 = Spieler, 2 = Gegner

    public PokeGui() {
        super("Pokemon Java");

        Menueleiste ml = new Menueleiste();
        setJMenuBar(ml.actual_menu_bar);

        schrift = new Font("Calibri", Font.BOLD, 19);

        gesamtPanel = new JPanel();
        gesamtPanel.setLayout(new BorderLayout());
        gesamtPanel.setFocusable(true);
        gesamtPanel.setBounds(0, 0, PokeMain.breite, PokeMain.hoehe);
        add(gesamtPanel);

        pk = new PaintKampf();//Objekt der Klasse PaintKampf(JLabel)
        pk.setBounds(0, 0, 300, 300);
        gesamtPanel.add(pk);

        hpBar1 = new JProgressBar(0, hp1);//Meine HP
        hpBar1.setValue(hp1);
        hpBar1.setFont(schrift);
        hpBar1.setString("HP: " + hp1);
        hpBar1.setStringPainted(true);
        hpBar1.setForeground(Color.GREEN);
        hpBar1.setBackground(Color.WHITE);
        //      gesamtPanel.add(hpBar1,BorderLayout.NORTH);

        hpBar2 = new JProgressBar(0, hp2);//Gegner HP
        hpBar2.setValue(hp2);
        hpBar2.setString("HP: " + hp2);
        hpBar2.setStringPainted(true);
        hpBar2.setForeground(Color.GREEN);
        hpBar2.setBackground(Color.WHITE);
        //      gesamtPanel.add(hpBar2,BorderLayout.EAST);

        unteresPanel = new JPanel();//enthaelt Aktionen wahrend eines Kampfes sowie Textanzeige waehrenddessen
        unteresPanel.setLayout(new GridLayout(1, 0));
        gesamtPanel.add(unteresPanel, BorderLayout.SOUTH);

        infoAnzeige = new JTextArea("What should your POKéMON\ndo?");
        infoAnzeige.setLineWrap(false);
        infoAnzeige.setOpaque(false);//durchsichtig
        infoAnzeige.setEditable(false);
        infoAnzeige.setFocusable(false);
        infoAnzeige.setForeground(new Color(30, 60, 240));
        infoAnzeige.setFont(schrift);

        infoPanel = new JPanel();//ganz unten links
        infoPanel.add(infoAnzeige);//fuegt das JTextArea zum Panel hinzu
        infoPanel.setBackground(new Color(240, 255, 255));
        unteresPanel.add(infoPanel);

        aktionPanel = new JPanel();//ganz unten rechts
        aktionPanel.setLayout(new GridLayout(2, 0));
        aktionPanel.setFocusable(true);
        unteresPanel.add(aktionPanel);//fuegt es dem "uebergeordneten" Panel hinzu
        aktionPanel.addKeyListener(new KeyHandler());

        attackenPanel = new JPanel();//ganz unten rechts
        attackenPanel.setLayout(new GridLayout(2, 2));
        attackenPanel.setVisible(false);

        //Initialisierung der Buttons sowie Auslesen der Attackennamen
        try {
            br = new BufferedReader(new FileReader("src/Player_Attacken.txt"));
            attacke1 = new JButton(br.readLine());//liest aus der Datei die jeweilige Zeile aus und geht dann zur naechsten Zeile
            attacke2 = new JButton(br.readLine());
            attacke3 = new JButton(br.readLine());
            attacke4 = new JButton(br.readLine());
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException io) {
        }

        attacke1.setContentAreaFilled(false);//macht alles ausser dem Inhalt unsichtbar
        attacke1.setFont(schrift);
        attackenPanel.add(attacke1);
        attacke1.addKeyListener(new KeyHandler());
        attacke1.addActionListener(new ActionHandler_Kampf());

        attacke2.setContentAreaFilled(false);//macht alles ausser dem Inhalt unsichtbar
        attacke2.setFont(schrift);
        attackenPanel.add(attacke2);
        attacke2.addKeyListener(new KeyHandler());
        attacke2.addActionListener(new ActionHandler_Kampf());

        attacke3.setContentAreaFilled(false);//macht alles ausser dem Inhalt unsichtbar
        attacke3.setFont(schrift);
        attackenPanel.add(attacke3);
        attacke3.addKeyListener(new KeyHandler());
        attacke3.addActionListener(new ActionHandler_Kampf());

        attacke4.setContentAreaFilled(false);//macht alles ausser dem Inhalt unsichtbar
        attacke4.setFont(schrift);
        attackenPanel.add(attacke4);
        attacke4.addKeyListener(new KeyHandler());
        attacke4.addActionListener(new ActionHandler_Kampf());

        fight = new JButton("FIGHT");
        fight.setBorderPainted(false);//macht die Raender unsichtbar
        //      fight.setContentAreaFilled(false);//macht alles ausser dem Inhalt unsichtbar
        fight.setBackground(Color.RED);
        fight.setFont(schrift);
        aktionPanel.add(fight);
        fight.addKeyListener(new KeyHandler());
        fight.addActionListener(new ActionHandler_Kampf());

        bag = new JButton("BAG");
        bag.setFont(schrift);
        bag.setBorderPainted(false);
        bag.setBackground(new Color(218, 165, 32));
        aktionPanel.add(bag);
        bag.addKeyListener(new KeyHandler());
        bag.addActionListener(new ActionHandler_Kampf());

        team = new JButton("POKéMON");
        team.setFont(schrift);
        team.setBorderPainted(false);
        team.setBackground(new Color(50, 205, 50));
        aktionPanel.add(team);
        team.addKeyListener(new KeyHandler());
        team.addActionListener(new ActionHandler_Kampf());

        run = new JButton("RUN");
        run.setFont(schrift);
        run.setBorderPainted(false);
        run.setBackground(new Color(30, 144, 255));
        aktionPanel.add(run);
        run.addKeyListener(new KeyHandler());
        run.addActionListener(new ActionHandler_Kampf());

        //      gesamtPanel.setVisible(false);
    }
}

这是我的paintComponent-Method,我绘制图像。

package paket;
import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JLabel;

public class PaintKampf extends JLabel {
    Image kampf_hintergrund, P1, P2;//Hintergrund
    URL link, linkP1, linkP2;//URL des Bildes

    @Override
    public void paintComponent(Graphics g) {//paint-Methode
        super.paintComponent(g);
        try {
            link = new URL("http://i.imgur.com/pwkzzgv.png");
        }//holt sich das Bild von diesem Link
        catch (MalformedURLException e) {
            e.printStackTrace();
        }

        try {
            kampf_hintergrund = ImageIO.read(link);
        }//setzt das Bild gleich der URL
        catch (IOException e) {
            e.printStackTrace();
        }

        try {
            linkP1 = new URL("http://i.imgur.com/dg5xRUy.png");
        }//holt sich das Bild von diesem Link
        catch (MalformedURLException e) {
            e.printStackTrace();
        }

        try {
            P1 = ImageIO.read(linkP1);
        }//Spieler 1
        catch (IOException e) {
            e.printStackTrace();
        }

        try {
            linkP2 = new URL("http://i.imgur.com/fdZyPbr.png");
        }//holt sich das Bild von diesem Link
        catch (MalformedURLException e) {
            e.printStackTrace();
        }

        try {
            P2 = ImageIO.read(linkP2);
        }//Spieler 2
        catch (IOException e) {
            e.printStackTrace();
        }

        g.drawImage(kampf_hintergrund, 0, 0, null);//zeichnet das Hintergrundbild
        g.drawImage(P1, 0, 200, null);
        g.drawImage(P2, 350, 90, null);
    }
}

我还不能发布任何图片,但正如我所说,在Eclipse中,程序本身似乎没有任何问题。

0 个答案:

没有答案