我对编程很新,但我正在努力学习。我已经收拾了不少但有些概念似乎已经过去了。看起来当你像我一样学习并搜索问题时,你会得到许多不同的答案。有时,答案措辞的方式可能会让初学者感到困惑。无论如何,这是我的问题。
我创建了一个非常简单的程序,它将对墙上的CMU块进行基本计算。我使用了JOptionPane而不是console。我在记事本中编写了代码,然后将其保存为.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却没有。任何帮助都会很棒。
答案 0 :(得分:1)
bg
更改为Bg
。Bg
必须是公开的,因此将类型定义更改为public class Bg
。Bg
并未告诉我有关其定义类型的任何信息。答案 1 :(得分:0)
可能会发生一些事情,但打开jar并确认清单名为manifest.mf(不是.txt),并且它位于META-INF目录中。 Jars或多或少是zip文件,因此如果您在打开它时遇到问题,只需添加一个.zip扩展名即可快速而肮脏地访问它(完成后将其重命名)。
答案 2 :(得分:0)
java的“规则”是类名和源文件名必须相同(所以class bg
应该是文件名bg.java
。你没有这样做
BTW,我无法弄清楚你是如何得到一个名为bg.class
的文件,因为javac
命令输出的.class file
与输入.java
文件的基本名称相同(在您的情况下为blocktestgui.java
)
答案 3 :(得分:0)
此外,这是默认的清单。 。 。 创建JAR文件时,它会自动接收默认清单文件。归档中只能有一个清单文件,并且它始终具有路径名
META-INF / MANIFEST.MF
创建JAR文件时,默认清单文件只包含以下内容:
清单 - 版本:1.0 创建者:1.7.0_06(Oracle Corporation)
这些行显示清单的条目采用“header:value”对的形式。标题的名称通过冒号与其值分隔。默认清单符合清单规范的1.0版,由JDK的1.7.0_06版本创建。
清单还可以包含有关存档中打包的其他文件的信息。究竟应该在清单中记录哪些文件信息取决于您打算如何使用JAR文件。默认清单不会假设它应该记录哪些关于其他文件的信息。