java - 执行简单 jar 文件时出现类未找到错误

标签 java jar

我正在学习 Java 并尝试使用 Swing 编写一个非常简单的程序。我使用命令行java工具。

我有一个包含以下内容的 java 文件:

import javax.swing.*;
import java.awt.*;

public class MyClass {

    public static class MyActLst implements java.awt.event.ActionListener {
       public void actionPerformed(java.awt.event.ActionEvent e)
       {
           System.out.println("Action occured.\n");
       }
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("Example");
        f.setSize(640,480);
        f.setLayout(null);

        JButton b = new JButton("OK");
        b.setBounds(0,0,100,100);
        b.setText("Test");

        MyActLst myActLst = new MyActLst();
        b.addActionListener(myActLst);
        f.add(b);

        f.setVisible(true);
    }
}

文件名是MyClass.java。当我使用“javac MyClass.java”编译它,然后使用“java MyClass”运行时,它可以工作。 但是,当我尝试使用“jar cmf MyClass.mf MyClass.jar MyClass.class MyClass.java”创建 .JAR 文件,然后尝试使用“java -jar MyClass.jar”执行它时,我收到一条错误消息:

Exception in thread "main" java.lang.noClassDefFoundError: MyClass$MyActLst
at MyClass.main(MyClass.java:25)[...]

似乎没有找到内部类MyActLst。令我不解的是,我直接自己编译.java文件就发现了。

MyClass.mf 看起来像这样:

Manifest-Version: 1.0
Main-Class: MyClass

这是我第一次尝试制作 .jar 文件,所以如果这是一个微不足道的问题,我很抱歉。

最佳答案

编译后,您有两个文件 MyClass$MyActLst.class 和 MyClass.class。您必须集成这两个文件。您可以使用“jar cmf MyClass.mf MyClass.jar *.class MyClass.java”

子类在不同的文件中生成。

关于java - 执行简单 jar 文件时出现类未找到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61407448/

相关文章:

java - 从 jar 中读取文本文件

maven - 删除maven中默认创建的jar

java - 无法加载 jar - "zip file is empty"

java - 将java应用程序转换为jar文件

java - 使用 Xerces 将 DOM 序列化为 FileOutputStream

java - 如何在java中的二叉搜索树的根处插入一个项目?

java - 这是什么物体?

java - 可执行的 shell 脚本在嵌入然后从 java 存档中提取后仍然可以执行吗?

java - 当它最初位于循环内部时,返回循环外部的值

java - Spring Data MongoDB 日期之间