2015-05-06 4 views
2

Для школы мы изучаем файлы .jar и способы их создания. Ниже у меня есть код для простого компонента GUI и Viewer.NoClassDefFoundError возникает при запуске файла .jar

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); 
} 
} 

Viewer:

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 для установки точки входа. Это создает файл .jar с именем Hello.jar. Если запустить двойной щелчок на .jar, возникает исключение Java. При запуске через командную строку отображается ошибка

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

В чем причина этой ошибки? Я использовал правильную команду для создания .jar?

ответ

2

Нет, вы не использовали правильную команду.

Ваши классы находятся в пакете mp6. Итак, внутри jar файлы .class также должны находиться в папке mp6. И название основного класса не HelloViewer, но mp6.HelloViewer.

Так, cd в родительский каталог (тот, содержащий папку mP6), а также использовать

jar cfe Hello.jar mp6.HelloViewer mp6 
0

Это происходит потому, что вы не создали банку правильно. Ваши классы принадлежат к пакету и поэтому должны находиться в директории с тем же именем.

При запуске команды

баночка CFE hello.jar HelloViewer HelloViewer.class HelloComponent.class

в директории, где ваши файлы класс, расположенной создать баночку без пути mp6. Я думаю, что ваши классы находятся в директории ./mp6, чтобы идти один каталог и запустить команду

баночка CFE MP6/hello.jar MP6/HelloViewer MP6/HelloViewer.class HelloComponent.class

Затем проверьте банку, выполнив jar -vft yourjar.jar

вы должны увидеть что-то вроде:

mp6/Hello.jar 
mp6/HelloViewer 
mp6/HelloViewer.class 

теперь вы можете использовать вашу баночку.

Смежные вопросы