无法找到主要类... jar或清单

时间:2012-02-22 16:08:27

标签: java

我对编程很新,但我正在努力学习。我已经收拾了不少但有些概念似乎已经过去了。看起来当你像我一样学习并搜索问题时,你会得到许多不同的答案。有时,答案措辞的方式可能会让初学者感到困惑。无论如何,这是我的问题。

我创建了一个非常简单的程序,它将对墙上的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却没有。任何帮助都会很棒。

4 个答案:

答案 0 :(得分:1)

  1. 按照惯例,类名必须以大写字母开头,将bg更改为Bg
  2. Bg必须是公开的,因此将类型定义更改为public class Bg
  3. 尝试选择更具描述性的类型名称,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文件。默认清单不会假设它应该记录哪些关于其他文件的信息。