java - 运行.jar文件时出现NoClassDefFoundError

标签 java jar noclassdeffounderror

在学校,我们正在学习 .jar 文件以及如何创建它们。下面我有一个简单的 GUI 组件和查看器的代码。

 package mp6;
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import javax.swing.JComponent;

public class HelloComponent extends JComponent 
{

public void draw(Graphics2D g2)
{
    g2.setFont(new Font("Arial", Font.ITALIC, 48));
    g2.setColor(Color.red);
    g2.drawString("Hello ", 40, 150);
    g2.setColor(Color.green);
    g2.drawString("Coloured ", 165, 150);
    g2.setColor(Color.blue);
    g2.drawString("JAR File", 380, 150);
}

public void paintComponent(Graphics g)
{
    Graphics2D g2 = (Graphics2D) g;
    draw(g2);
}
}

浏览者:

package mp6
import javax.swing.JFrame;


public class HelloViewer {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) 
{
    final int FRAME_WIDTH = 600;
    final int FRAME_HEIGHT = 300;

    HelloComponent comp = new HelloComponent();

    JFrame frame = new JFrame();
    frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
    frame.setTitle("Hello World in Colour");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(comp);
    frame.setVisible(true);
}

}

使用命令行编译成.class文件后,我使用了命令

jar cfe Hello.jar HelloViewer HelloViewer.class HelloComponent.class

对于本练习,我们需要使用 -e 命令来设置入口点。这将创建一个名为 Hello.jar 的 .jar 文件。如果通过双击 .jar 来运行,则会发生 Java 异常。如果通过命令行运行它会显示错误

"Exception in thread main java.lang.NoClassDefFoundError: HelloViewer (wrong name: mp6/HelloViewer)". 

是什么导致了这个错误?我是否使用了正确的命令来构建 .jar ?

最佳答案

不,您没有使用正确的命令。

您的类(class)位于 mp6 包中。因此,在 jar 内,.class 文件也必须位于文件夹 mp6 中。并且主类的名称不是HelloViewer,而是mp6.HelloViewer

因此,cd 进入父目录(包含 mp6 文件夹的目录),然后使用

jar cfe Hello.jar mp6.HelloViewer mp6

关于java - 运行.jar文件时出现NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30075933/

相关文章:

java - Ant 构建不生成 jar 文件

java - 创建 JAR 文件并在命令提示符下使用?

android-studio - Android Studio在APK中包含Maven Artifact (渐变)

java - 无法执行使用 Rhino JavaScript 编译器编译的 JavaScript 文件

java, spring boot 在运行时自动生成 getter 和 setter

java - 如何在 Java 中设置 Windows 通知图标出现的时间长度

java - 我无法从数组输出中删除空值

java - Maven 从父级继承 checkstyle

java - 如何创建自定义 java 库并在 Android 应用程序中调用其函数

java - 不明白问题出在哪里(Java)