为什么我的Runnable Jar文件不起作用

我关注了大约10个不同的教程,但似乎没有一个教程,我的runnable jar文件无法正常工作。

当我在eclipse中运行它时,我的游戏运行正常 ,并且我能够将它变成一个可运行的jar文件,该文件在一两天前工作并且没有更改过多的代码。 当我尝试运行.jar时,屏幕底部会弹出一个java图标但是没有任何反应。

这是我的发射器无法打开(如果我没有启动器运行它工作正常),没有错误,我打开终端或日食。

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 = 11 && cy >= 66 && cx <= 70 && cy = 11 && cy >= 119 && cx <= 119 && cy = 11 && cy >= 170 && cx <= 114 && cy = 11 && cy >= 222 && cx <= 74 && cy = 11 && my >= 14 && mx <= 214 && my = 11 && my >= 66 && mx <= 70 && my = 11 && my >= 119 && mx <= 119 && my = 11 && my >= 170 && mx <= 114 && my = 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图标,但没有其他任何事情发生。

-谢谢

我假设您正在制作GUI应用程序,并通过单击启动Jar? 很多时候,如果GUI应用程序在启动时出错,它不会明显地执行任何操作,例如弹出错误消息,因为它还没有机会构建任何类型的GUI来报告错误。 我猜你改变的东西会在启动时导致exception,并且该消息不可见,因为你通过点击它来启动jar。

如果您从终端运行Jar(聚光灯:“终端”),您将能够看到阻止Jar运行的堆栈跟踪,并希望这将有助于您进一步调试。

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

您还可以尝试在main方法中捕获exception并显示GUI警报 ,但是如果在main方法启动之前引发exception(例如在类加载期间),则这不起作用。 换句话说,这是一个很好的,但并不能完全解决问题。 您可能仍需要从命令行运行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 } } 

要运行.jar文件,请在命令行中写入:

 java -jar 'jar_file'.jar 

其中'jar_file'是没有任何引号的jar文件的名称。 在你的情况下,它似乎是run.jar

.jar文件是.zip文件,这可能会混淆操作系统

Jar文件格式

尝试从bin文件夹中删除.class文件,然后重新启动项目并清理项目。 这是eclipse的问题。即使我面临同样的问题,然后我删除了文件,并按照提到的过程。