6

約 10 の異なるチュートリアルに従いましたが、どれもうまくいかないようでした。実行可能な jar ファイルが機能していません。

私のゲームは、Eclipse で実行すると問題なく動作し、実行可能な jar ファイルにすることができました。これは 1 日か 2 日前に機能し、あまりコードを変更していません。.jar を実行しようとすると、Java アイコンが画面の下部に表示されますが、何も起こりません。

私のランチャーが開かないのです(ランチャーなしで実行すると正常に動作します)、ターミナルまたはEclipseで開いてもエラーはありません。

package com.l3g3nds.threed;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class Launcher extends JFrame implements MouseListener, MouseMotionListener {
    private static final long serialVersionUID = 1L;

    protected JPanel window = new JPanel();
    // private JButton play, options, help, quit, credits;
    // private Rectangle rplay, roptions, rhelp, rquit, rcredits;

    protected int buttonWidth = 120;
    protected int buttonHeight = 40;

    public Launcher(int id) {
        JPanel panel = (JPanel) getContentPane();

        JLabel label = new JLabel();
        label.setIcon(new ImageIcon("res/Launcher/schoolbackground.png"));
        System.out.println(Display.lScreen());
        if (Display.lScreen() == 5)
            label.setIcon(new ImageIcon("res/Launcher/quit1.png"));
        if (Display.lScreen() == 4)
            label.setIcon(new ImageIcon("res/Launcher/credits1.png"));
        if (Display.lScreen() == 3)
            label.setIcon(new ImageIcon("res/Launcher/options1.png"));
        if (Display.lScreen() == 2)
            label.setIcon(new ImageIcon("res/Launcher/help1.png"));
        if (Display.lScreen() == 1)
            label.setIcon(new ImageIcon("res/Launcher/beginrunning1.png"));
        panel.add(label);

        setUndecorated(true);

        System.out.println("launched");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);
        pack();
        setVisible(true);

        addMouseListener(this);
        addMouseMotionListener(this);

    }

    public void drawButtons() {
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        int cx = e.getX();
        int cy = e.getY();
        if (cx >= 11 && cy >= 14 && cx <= 214 && cy <= 44) {
            dispose();
            new RunGame();
        } else if (cx >= 11 && cy >= 66 && cx <= 70 && cy <= 96) {
            //open help
        } else if (cx >= 11 && cy >= 119 && cx <= 119 && cy <= 144) {
            this.dispose();
            new Options();
        } else if (cx >= 11 && cy >= 170 && cx <= 114 && cy <= 200) {
            //open credits
        } else if (cx >= 11 && cy >= 222 && cx <= 74 && cy <= 254) {
            System.exit(0);
        }

    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseDragged(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub
        int mx = e.getX();
        int my = e.getY();
        if (mx >= 11 && my >= 14 && mx <= 214 && my <= 44) {
            if (Display.lScreen() != 1) {
                Display.setlScreen(1);
                new Launcher(1);
                System.out.println("1");
            }
        } else if (mx >= 11 && my >= 66 && mx <= 70 && my <= 96) {
            if (Display.lScreen() != 2) {
                Display.setlScreen(2);
                new Launcher(1);
                System.out.println("2");
            }
        } else if (mx >= 11 && my >= 119 && mx <= 119 && my <= 144) {
            if (Display.lScreen() != 3) {
                Display.setlScreen(3);
                new Launcher(1);
                System.out.println("3");
            }
        } else if (mx >= 11 && my >= 170 && mx <= 114 && my <= 200) {
            if (Display.lScreen() != 4) {
                Display.setlScreen(4);
                new Launcher(1);
                System.out.println("4");
            }
        } else if (mx >= 11 && my >= 222 && mx <= 74 && my <= 254) {
            if (Display.lScreen() != 5) {
                Display.setlScreen(5);
                new Launcher(1);
                System.out.println("5");
            }
        }
        else {
            if (Display.lScreen() != 0) {
                Display.setlScreen(0);
                new Launcher(1);
                System.out.println("0");
            }
        }
    }
}

それが役立つ場合、私はMacを使用しています...

これは、私が行った正確な手順のスクリーンショットです

いくつかの警告が表示されました (未使用の変数が原因だと思います。以前に .jar を動作させることができたときにこのメッセージを受け取りました)

これは、画面の上部に Java アイコンが下部に表示されているように見えますが、他には何も起こりません。

-ありがとう

4

3 に答える 3

19

GUI アプリケーションを作成していて、Jar をクリックして起動していると思いますか? 多くの場合、GUI アプリケーションで起動時にエラーが発生しても、エラー メッセージをポップするなどの目に見えることは何もしません。これは、エラーを報告するための GUI を構築する機会がまだないためです。変更したものによって起動時に例外が発生し、クリックして jar を起動しているため、そのメッセージは表示されないと思います。

代わりに端末から Jar を実行すると (スポットライト: 「端末」)、Jar の実行を妨げているスタック トレースを確認でき、さらにデバッグするのに役立つことを願っています。

$ cd directory/of/jar
$ java -jar name_of_jar.jar
  .... stack trace should appear here, or program should run

mainメソッドで例外をキャッチしてGUI アラートを表示するmainこともできますが、メソッドの開始前 (クラスのロード中など) に例外が発生した場合は機能しません。言い換えれば、あると便利ですが、問題を完全に解決するわけではありません。コマンド ラインから Jar を実行する必要がある場合もあります。

public static void main(String[] args) {
  try {
    // body of main method goes here, including any other error handling
  } catch (Throwable t) {
    JOptionPane.showMessageDialog(
        null, t.getClass().getSimpleName() + ": " + t.getMessage());
    throw t; // don't suppress Throwable
  }
}
于 2013-05-22T22:30:27.557 に答える