Класс не найден Ошибка при выполнении простого файла JAR - PullRequest
0 голосов
/ 24 апреля 2020

Я изучаю 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, используя «jar cmf MyClass.mf MyClass.jar MyClass.class MyClass. java», а затем пытаюсь выполнить его, используя «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, так что извините, если это тривиальный вопрос.

1 Ответ

1 голос
/ 24 апреля 2020

После компиляции у вас есть два файла MyClass $ MyActLst.class и MyClass.class. Вы должны объединить эти два файла. Вы можете использовать "jar cmf MyClass.mf MyClass.jar * .class MyClass. java"

Подкласс генерируется в разных файлах.

...