1

好的,这是我的第二轮问题。我在记事本中创建了一个简单的程序并将其保存为 (Blocktestgui.java)java 文件。我使用命令 javac Blocktestgui.java 编译并获取(Blocktestgui.class)我创建了一个文本清单文件(见下文)并将其保存为 manifest.mf 然后运行命令jar cvf bg.jar Blocktestgui.class manifest.mf并获取(bg.jar)

这是我的java文件:

import javax.swing.JOptionPane;
public class Blocktestgui {
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 之前的 manifest.mf:

Main-Class: Blocktestgui

当我提取 jar 的内容时,我得到一个文件夹和两个文件

文件夹>--META-INF <--contains MANIFEST.MF<-- 此文件不包含行 Main-Class: Blocktestgui

文件>--Blocktestgui.class

File>--manifest.mf<--这个文件说的是Main-Class: Blocktestgui

TestFolder/
    |- META-INF/
        |- MANIFEST.MF (This file does not contain the line Main-Class: Blocktestgui)
    |- Blocktestgui.class
    |- manifest.mf (This file says is Main-Class: Blocktestgui)

当我在控制台中使用 java -jar bg.jar 运行 jar 文件时,它给了我一个错误“在 bg.jar 中没有主清单属性”

我在搞什么鬼?

4

3 回答 3

4

您需要单独指定清单信息,而不仅仅是作为要包含的文件之一:

文档

jar c[v0Mmfe] [manifest] [jarfile] [entrypoint] [-C dir] inputfiles [-Joption]

在你的情况下:

jar cvmf manifest.mf bg.jar Blockingtestgui.class

或者,更简单地说,没有特定的清单文件:

jar cvfe bg.jar Blockingtestgui.class Blockingtestgui.class

第一个Blockingtestgui.class指定入口点,第二个指定要包含的文件。注意,标志的顺序在这里很重要;、m和信息应按指定标志fe顺序出现。

于 2012-02-22T20:07:23.087 回答
1

我建议使用构建工具来创建一个 jar 文件,而不是尝试自己创建一个。

Apache Ant通常用于构建 jar 文件。

以下是在 Windows 上安装 Ant 的说明。

这是为您的项目编写 Ant build.xml 文件的教程。

于 2012-02-22T20:01:39.140 回答
0

确保 manifest.mf 文件中的单行以换行符结尾。

于 2012-02-22T20:00:21.133 回答