Java 导出为 Jar 有错误 [关闭]

2024-04-14

两个问题

1)当将java项目导出为JAR文件时,应用程序如何知道首先运行包中的哪个Class?我的应用程序特别要求 userInterface.java 文件在 CommonDenom.java 文件之前运行。

2) 运行 java 文件时,我收到一条错误消息,显示“无法启动 Java JAR 文件“commonDenom.jar”。请检查控制台以获取可能的消息。”

我从哪里开始解决这个问题?我检查了控制台,但在弹出错误消息时它似乎没有注册任何内容。

package commonDenom;

import java.util.Arrays;
import java.util.Scanner;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;


public class UserInterface {
    Shell shell;
    Button btnNext;
    Button btnDone;
    Text input;
    Text output;
    static int count;
    static int[] finalNums;
    int[] nums = new int[1000];

    public static void main(String[] args){
        Display display = new Display();
        new UserInterface(display);
        display.dispose();
    }

    public UserInterface(Display display){
        shell = new Shell(display);
        shell.setSize(220,350);
        shell.open();

        input = new Text(shell, SWT.SINGLE);
        input.setBounds(10, 10, 100, 20);

        btnNext = new Button(shell, SWT.PUSH);
        btnNext.setBounds(10, 40, 100, 30);
        btnNext.setText("Next");
        nextPress();

        btnDone = new Button(shell, SWT.PUSH);
        btnDone.setBounds(10, 80, 100, 30);
        btnDone.setText("Done");
        donePress();

        output = new Text(shell, SWT.SINGLE);
        output.setBounds(10, 120, 200, 200);

        while(!shell.isDisposed()){
            if(!display.readAndDispatch()){
                display.sleep();
            }
        }
    }

    public void nextPress(){

        btnNext.addSelectionListener(new SelectionAdapter(){
            int x = 0;
            @Override
            public void widgetSelected(SelectionEvent e) {
                    nums[x] = Integer.parseInt(input.getText());
                    System.out.println("nums[" + x + "]:" + nums[x]);
                    x++;
                    count++;
            }
        });
    }

    public void donePress(){
        btnDone.addSelectionListener(new SelectionAdapter(){
            @Override
            public void widgetSelected(SelectionEvent e) {
                finalNums = new int[count]; 
                for(int i = 0; i < count; i++){
                    finalNums[i] = nums[i];
                }
                System.out.println("finalNums:" + Arrays.toString(finalNums));
                commonDenom.compare();
                if(commonDenom.getResult() == 0){
                    output.setText(Arrays.toString(finalNums) + "\nThese numbers do not have a \ncommon multiplier");
                }
                else{
                    output.setText(Arrays.toString(finalNums) + "\nResult:" + String.valueOf(commonDenom.getResult()));
                }
            }
        });
    }
    public static int[] getNums(){
        return finalNums;
    }
}

Manifest.txt 位置:/Dropbox/workspace/commonDenom/bin

类位置:/Dropbox/workspace/commonDenom/bin/commonDenom/

班级名称:

commonDenom.class
UserInterface.class
UserInterface$1.class (I didn't create this)
UserInterface$2.class (I didn't create this)

Manifest.txt 内容(带有两个尾随空行):

Main-Class: commonDenom.UserInterface

jar tf CommonDenom.jar 返回以下内容:

META-INF/
META-INF/MANIFEST.MF
Manifest.txt
commonDenom/
commonDenom/commonDenom.class
commonDenom/UserInterface$1.class
commonDenom/UserInterface$2.class
commonDenom/UserInterface.class

我建议先手动创建罐子。这将是一次很好的理智测试,您将了解如何做到这一点。步骤如下:

  1. 创建一个Manifest.txt文件某处,假设您的项目根目录。一行就足够了,就像这样:

    Main-Class: commonDenom.UserInterface
    

    确保文件以换行符结尾。默认情况下,Eclipse 不会在文件末尾添加换行符。尾随空白行是可以的。

  2. 前往父目录Eclipse 放置类文件的位置。例如,在 Maven 项目中,这是target/classes相对于项目根目录。 Ant 构建可能会使用bin反而。在您的示例中,这应该是包含的目录commonDenom(它又包含构建产品:UserInterface.class)

  3. 创建罐子:

    jar cfm /tmp/somename.jar /path/to/Manifest.txt commonDenom
    # or probably:
    jar cfm /tmp/somename.jar /path/to/Manifest.txt *
    

    这会将您的类文件树放入具有指定清单文件的 jar 中。

现在您应该能够运行该文件。这可以是您的基线测试。

您可以使用以下命令检查 jar 的内容:

jar tf /tmp/somename.jar

它应该打印如下内容:

META-INF/
META-INF/MANIFEST.MF
commonDenom/UserInterface.class
...  # your other class files...

现在您已经有了基线测试,您可以尝试使用 Eclipse 创建 jar。如果 Eclipse 创建的 jar 不起作用,您可以查看其内容以了解与基准情况的差异,这应该有助于您调试问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 导出为 Jar 有错误 [关闭] 的相关文章

随机推荐

  • 无效的 int 输入陷入无限循环[重复]

    这个问题在这里已经有答案了 do cout lt lt Enter the numerator and denominator of the first fraction cin gt gt a gt gt b cout lt lt end
  • 通过另一个表对 hasMany 进行 Sequelize

    好的 我有以下三个models Module var Module sequelize define module id DataTypes INTEGER name DataTypes STRING description DataTyp
  • Linux 核心转储太大!

    最近 我注意到应用程序生成的核心转储的大小有所增加 最初 它们的大小约为 5MB 包含大约 5 个堆栈帧 现在我的核心转储超过 2GB 其中包含的信息与较小的转储没有什么不同 有什么方法可以控制生成的核心转储的大小吗 它们不应该至少小于应用
  • 使用 Neo4J 和 Spring Data 按 ID 创建关系

    我定义了一个简单的节点对象 如下所示 Node product public class Product Id private String sku Relationship type SOLD BY private Set
  • 如何更改应用商店中的销售国家/地区[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 您好 我的应用程序出现在美国商店 但它主要是澳大利亚应用程序 如何让它出现在澳大利亚应用商店而不是美国应用商店中 但是我仍然可以在澳大利亚应用商店中搜
  • 通过 feature_columns 使用 Dataset API 将自由文本特征输入 Tensorflow Canned Estimators

    我正在尝试建立一个模型reddit score f subreddit comment 主要是作为一个示例 我可以在此基础上构建一个工作项目 我的代码是here https github com andrewm4894 my google
  • iOS:UIButton根据文本长度调整大小

    In interface builder holding Command will resize a button to fit its text I was wondering if this was possible to do pro
  • 如何在 ColdFusion 中通过多组验证尝试来实现 OWASP ESAPI 验证器?

    我一直在研究 ColdFusion 9 中包含的 OWASP ESAPI 实用程序 ColdFusion 的内置企业安全 API http www petefreitag com item 788 cfm The encoder实用程序非常
  • PHP 致命错误

    当 PHP 出现致命错误时 有没有办法让代码继续 而不是退出 例如 我遇到超时致命错误 并且我希望每当它发生时就跳过此任务并继续执行其他任务 在这种情况下 脚本退出 有一种使用输出缓冲的 hack 可以让您记录某些致命错误 但是在发生致命错
  • 在WP7中调用普通的Web服务

    我有普通的 NET Web 服务 不是 WCF 服务 我已使用服务参考将此服务添加到我的 WP7 项目中 因为我们没有 通常我们会使用 添加服务引用 选项添加 WCF 服务 但这里我使用 添加服务引用 选项添加普通的 Web 服务 例如我有
  • python 3.5 中的 json.loads 和 Redis

    我使用 json dumps 创建了一个 JSON 对象 并在 Redis 列表中将其 RPUSH ed 当使用 LRANGE redis lrange 返回 JSON 时 我收到一个二进制字符串 b si 00 ff 所以 json lo
  • 如何将 ISO 8601 格式的日期值转换为 JavaScript 中的日期对象?

    我一直在尝试将日期值转换为更易读的格式 为此 我尝试使用 JavaScript 解析日期Date parse 方法 然而 这不适用于输入 例如 2007 09 21T14 15 34 058 07 00 我有 最终目标是输出一个日期字符串
  • Eclipse IDE Java 构建路径已更改。我选择哪个?

    我正在尝试遵循一些有关 Selenium 的教程 但此时遇到了困难 右键单击 项目 并选择属性 在 属性 对话框中 单击 Java 构建路径 单击库选项卡 然后 单击 添加外部 JAR 添加外部 JARS 按钮呈灰色且禁用 该对话框显示模块
  • pyside-rcc“dyld:库未加载:...”

    我是一个 python 和 Qt 新手 我在运行 pyside rcc 和 Pyrcc4 时遇到一些问题 问题不在于可执行文件的链接 而在于库问题 我不是 Unix 向导 可能也没有帮助 当我跑步时 pyside rcc我收到以下错误 dy
  • 在 LINQ 中查找相似记录

    我有以下 LINQ 查询 它将用于查找任何 相似 的货物 from c in cons group c by new c TripDate Value c DeliveryPostcode c DeliveryName into cg le
  • Firefox 在 SVG“使用”具有遮罩的元素上出现不透明度问题

    我最近注意到我的一张 SVG 图像在 Firefox 中查看时似乎失去了半透明性 我一直在追踪这个问题 它让我发现opacity不被服从时use元素 具体来说 有一个mask随附的 我能够使用fill opacity解决这个问题 但这并不理
  • 如何使用 Swift 更改 iOS 中 UIButton 的状态?

    我有六个按钮的 Objective C 工作代码 但我似乎没有找到如何使用 Swift 更改按钮的状态 那么如何让下面的代码在 Swift 中工作呢 self button2 setBackgroundImage UIImage image
  • 甲骨文对谷歌的诉讼对 Android 开发者意味着什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 什么是甲骨文对谷歌提起诉讼 http mashable com 2010 08 14 google rebuts oracle lawsuit inv
  • ConcurrentQueue .Net:多线程消费者

    我有一个非常基本的问题 更多地围绕以下概念ConcurrentQueue 队列是先进先出的 当多个线程开始访问时 我们如何保证先进先出呢 假设我添加了Apple Oranges Lemon Peach and Apricot 以该顺序 首先
  • Java 导出为 Jar 有错误 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 两个问题 1 当将java项目导出为JAR文件时 应用程序如何知道首先运行包中的哪个Class 我的应用程序特别要求 userInterfa