Java 我收到一个错误:尝试打开文件hola.jar时发生意外错误
我使用的是Linux ubuntu,我创建了一个名为hola.java的java程序,它是下面的程序代码,这个程序运行得非常好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
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如果它起作用,那么你应该通过接受答案来结束这个问题