[英]Could not find main class…jar or manifest
我对编程非常陌生,但是我正在尝试学习。 我学到了很多东西,但是有些概念似乎笼罩着我。 好像当您像我一样学习并且搜索问题时,您会得到许多不同的答案。 有时,答案的措辞方式可能会使初学者感到困惑。 无论如何,这是我的问题。
我创建了一个非常简单的程序,它将对墙上的CMU块进行基本计算。 我使用了JOptionPane而不是控制台。 我在记事本中编写了代码,然后将其另存为.java文件(blocktestgui.java)。 然后,我使用命令“ javac blocktestgui.java”对其进行编译,以获取“ bg.class”文件。 我可以使用“ java bg”从cmd运行该程序,并且效果很好。 我真正的问题来自jar文件。 我用Main-Class创建了manifest.txt文件:bg,然后是空行。 然后,我使用“ jar cvmf manifest.txt CMU.jar bg.class”,得到一个jar文件。 然后,每当我运行它(使用cmd或双击)时,都会出现“找不到主类”错误。
这是我所拥有的:
我的Java文件:
import javax.swing.JOptionPane;
class bg {
public static void main(String[] args) {
String firstNumber, secondNumber;
double number1, number2, sum;
firstNumber = JOptionPane.showInputDialog(
"Enter wall length in decimal feet:",
JOptionPane.INFORMATION_MESSAGE);
secondNumber = JOptionPane.showInputDialog(
"Enter wall height in decimal feet:",
JOptionPane.INFORMATION_MESSAGE);
number1 = Double.parseDouble(firstNumber);
number2 = Double.parseDouble(secondNumber);
sum = (number1 * number2) / 0.88;
JOptionPane.showMessageDialog(null, "Total Blocks are " + sum,
"Results", JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
}
我的jar包含我的bg.class文件,这就是清单文件的样子:
Manifest-Version: 1.0
Created-By: 1.7.0_02 (Oracle Corporation)
Main-Class: bg
我不知所措,因为我的java文件可以工作,但是jar不能。 任何帮助都会很棒。
bg
更改为Bg
。 Bg
必须是public,因此将类型定义更改为public class Bg
。 Bg
不会告诉我有关其定义的类型的任何信息。 而且这是默认清单。 。 。 创建JAR文件时,它将自动接收默认清单文件。 存档中只能有一个清单文件,并且该清单文件始终具有路径名
META-INF / MANIFEST.MF
创建JAR文件时,默认清单文件仅包含以下内容:
清单版本:1.0创建者:1.7.0_06(Oracle Corporation)
这些行显示清单的条目采用“标头:值”对的形式。 标题名称与其值之间用冒号分隔。 默认清单符合清单规范的1.0版,并由JDK的1.7.0_06版创建。
清单还可以包含有关归档文件中打包的其他文件的信息。 清单中应确切记录哪些文件信息取决于您打算如何使用JAR文件。 默认清单没有假设它应该记录关于其他文件的哪些信息。
可能有几件事发生,但是打开jar并确认清单称为manifest.mf(而不是.txt),并且清单位于META-INF目录中。 Jar或多或少是zip文件,因此如果您在打开它时遇到麻烦,只需添加.zip扩展名即可快速而又肮脏地访问它(完成后将其重命名)。
类名和源文件名必须相同是Java的“规则”(因此class bg
应位于文件名bg.java
。您还没有这样做。
顺便说一句,我无法弄清楚如何得到一个名为bg.class
的文件,因为javac
命令输出的.class file
的基本名称与输入的.java
文件的名称相同(在您的情况下为blocktestgui.java
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.