Class执行一个简单的jar文件时找不到错误

Class not found Error when executing a simple jar file

我正在学习 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)[...]

似乎没有找到内部 class 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"

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