在学校,我们正在学习 .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/