Java 我收到一个错误:尝试打开文件hola.jar时发生意外错误

Java 我收到一个错误:尝试打开文件hola.jar时发生意外错误,java,jar,Java,Jar,我使用的是Linux ubuntu,我创建了一个名为hola.java的java程序,它是下面的程序代码,这个程序运行得非常好 import javax.swing.*; import java.awt.*; public class hola extends JFrame { JButton b1 = new JButton("presionar"); hola(){ super("Botones"); setSize(250,250); setDefaultCloseO

我使用的是Linux ubuntu,我创建了一个名为hola.java的java程序,它是下面的程序代码,这个程序运行得非常好

import javax.swing.*;
import java.awt.*;

public class hola extends JFrame {

JButton b1 = new JButton("presionar");

 hola(){

  super("Botones");
  setSize(250,250);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  FlowLayout flo=new FlowLayout();
  setLayout(flo);
  add(b1);
  setVisible(true);

  }

  public static void main(String[] args)
 {


    hola bt = new hola();
   }

}
这个java程序在运行时工作得非常好 现在,我在命令行中创建了该程序的jar文件:

jar cf hola.jar hola.class

这将创建一个名为hola.Jar的Jar文件

我甚至在manifest.mf文件中编写了Main Class:hola

当我尝试通过以下方式运行此操作时:

java-jarhola.jar

我收到一个错误:
尝试打开文件hola.jar时发生意外错误


请告诉我如何运行jar文件以便获得输出:“(,我无法将此程序作为jar文件运行的可能原因是什么,即使程序使用“java hola.java”也能完美地运行。要在jar文件中运行java文件,您无需打开它。您只需确保您的类路径具有给定的jar文件

如果类位于包中,则可以使用

java -cp hola.jar package.hola
如果类不在包中,则只需使用

java -cp hola.jar hola
如果您不在hola.jar所在的目录中,则可以尝试以下操作:

  • 如果在包装内

    java-cp/locationOfJar/hola.jar-package.hola

  • 或者如果不在包装内

    java-cp/locationOfJar/hola.jar-hola


此错误主要表示无效<代码>清单.MF文件。可能是长线、末尾终止符、中间的空行,很多事情可能出错。使用<代码> -CP <代码>只是解决问题,但不修复根本原因。在某些操作系统上,jar上的> 65535个文件也会发生错误。 我在尝试通过-jar启动时遇到了相同的错误消息:

$java-jar app.jar
错误:尝试打开文件app.jar时发生意外错误
根本原因是我的sbt汇编输出.jar文件包含超过65535个条目

$zipinfo app.jar | wc-l
65543
解决方案:短期解决方案是删除旧的依赖项,以将汇编的.class文件数降低到16位文件计数限制以下

长期解决方案将涉及在目标操作系统上测试Zip64 jvm支持。不确定Zip64自动协商为何不会自动发生

使用MacOSX 10.15.7上的sbt assembly 15.0、openjdk版本“11.0.8”可以复制此问题

开始代码审查:

包java.util.zip;
...
公众的
类ZipOutputStream扩展了DeflaterOutputStream,实现了ZipConstants{
/**
*是否对超过64k条目的zip文件使用ZIP64。
*在ZIP64在zip实现中的支持无处不在之前,这个
*系统属性允许创建zip文件,这些文件可以
*由容忍“不正确”的旧版zip实现读取
*总条目计数字段,如jdk6中的字段,甚至
*有些是jdk7。
*/
专用静态最终布尔值Zip64=
Boolean.parseBoolean(
GetPropertyAction.privilegedGetProperty(“jdk.util.zip.zip64”);

那么mainfest呢?、上面显示的创建jar文件的方法是否错误?、在linux命令提示符下创建jar文件的最佳方法是什么?@omareitorrescastillo如果您只需要在linux中创建一个jar,那么您只需执行
jar cvf classes.jar*.class
。尽管详细的输出并不表示为此,Jar工具会自动向Jar归档文件中添加一个清单文件,路径名为
META-INF/manifest.MF
details@OmarElioTorresCastillo如果这解决了问题,那么您可以通过选择一个答案作为已接受的解决方案root@**********:/**********/Documentos/java_examples/hola#jar cvf hola.jar来结束此问题*.class manifiesto agregado agregando:hola.class(entrada=740)(salida=499)(desinflado 32%)root@*********://***********/Documentos/java_examples/hola#java-cp hola.jar hola我已经制作好了,它正在工作,thanks@OmarElioTorresCastillo如果它起作用,那么你应该通过接受答案来结束这个问题