繁体   English   中英

找不到主要类别…罐子或清单

[英]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不能。 任何帮助都会很棒。

  1. 按照约定,类名必须以大写字母开头,将bg更改为Bg
  2. Bg必须是public,因此将类型定义更改为public class Bg
  3. 尝试选择一个更具描述性的类型名称, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM