当前位置: 首页 > 知识库问答 >
问题:

错误:找不到或加载主类?JAR

梁丘宏硕
2023-03-14

当我尝试在Windows上以编程方式运行java-jar命令时,会发生一些奇怪的事情。

运行以下命令时:

Process p = Runtime.getRuntime().exec(cmd); //cmd string is ok
p.waitFor();

我知道这个错误

错误:找不到或加载主类JAR

cmd = String.format("java –jar %s –o win -i %s -n %s -d %s -s %s", jarLocation, param1, param2, tgtFilePath, srcFilePath);

[106,97,118,97,32,-30岁,-128,-109,106,97,114,32,110,112,116,95,108,105,99,101,110,115,101,46,106,97,114,32,-30岁,-128,109,111,32,119,105,110,32,45,105,32,104,111,115,105,100,55,56,57,48,49,32,45,110,110,104,111,116,110,97,109,101,32,45,100,108,105,105,108,105,99,101,101,109,101,102,100,108,105,101,108,101,101,116,116,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,10

硬编码字符串的字节:

[106,97,118,97,32,45,106,97,114,32,110,112,116,95,108,105,99,101,110,115,101,46,106,97,114,32,45,111,32,119,105,110,32,45,105,104,111,115,116,105,100,55,56,57,48,49,32,45,110,104,111,115,116,110,97,109,101,32,45,100,108,105,99,101,110,99,101,105,105,105,110,112,117,116,76,105,99,101,110,110,110,117,116,106,105,101,110,115,108,101,110,115,108,101,110,115,108,101,110,115,108,101,110,115,108,101,110,108,101,110,108,101,110,108,101,110,108,101,110,108,101,110,108,101,110,110

jarLocation是一个已经被硬编码的参数,而不是作为web服务参数接收的。

什么会引起这样的问题?

共有1个答案

陶超
2023-03-14

好吧,让我建议你做的事情更清楚些。

像这样修改代码

// this will be the command which produces �jar
cmd = String.format("java –jar %s –o win -i %s -n %s -d %s -s %s", jarLocation,
          param1, param2, tgtFilePath, srcFilePath);
System.out.println(Arrays.toString(cmd.getBytes(charsetLatin1)));

// this will be the working command, as you wrote
cmd = "here you type the same command";
System.out.println(Arrays.toString(cmd.getBytes(charsetLatin1)));        

然后比较字节,至少有差异。在此基础上,您可以进一步调查。

import java.nio.charset.StandardCharsets;

public class Dashes {

    public static void main(String[] args) {
        // see: https://en.wikipedia.org/wiki/Dash
        byte[] enDash = {-30, -128, -109};
        byte[] minusSign = {45};
        byte[] emDash = {-30, -128, -108};

        byte[][] charBytes = new byte[3][];
        charBytes[0] = enDash;
        charBytes[1] = minusSign;
        charBytes[2] = emDash;

        for (byte[] bytes : charBytes) {
            String s = new String(bytes, StandardCharsets.UTF_8);
            char c = s.charAt(0);
            System.out.printf("%d  %s  %s%n", s.length(), c, Character.getName(c));
        }
    }
}
byte[] b = "java –jar %s –o win -i %s -n %s -d %s -s %s".getBytes();
System.out.println(Arrays.toString(b));

[106,97,118,97,32,-30,-128,-109,106,97,114,32,37,115,32,-30,-128,-109,111,32,119,105,110,32,45,105,37,115,45,110,37,115,32,37,115,32,45,100,32,37,115,32,45,100,32,37,115,32,45,115,115,32,37,115,45,115,32,37,115]

显示jaro之前的破折号不是连字符减

解决方案

删除jaro选项前面的-(破折号),然后重新键入(作为连字符减号)。

 类似资料:
  • 问题内容: 我在编译和运行Java代码时遇到了麻烦,该代码旨在允许我将Java与模拟建模包Vensim的共享对象接口。 以下代码编译没有错误: 但是,当我尝试运行以下命令时: 我收到以下错误:“错误:找不到或加载主类SpatialModel”。我的SpatialModel.java代码确实包含一个“主要”方法(如下),所以我不确定是什么问题- 有人可以帮我吗?谢谢。 问题答案: 您必须确保将文件的

  • 我一直在搜索这一点,但没有任何帮助,我试图运行的主要类,但不断得到一个错误。我负责这个 我的主文件位于中 我尝试了多个命令,但一无所获。 我想运行位于中的主类,但总是出现此错误,请提供帮助吗?

  • 我有一个名为TestInventory.java的类,其他类在默认包中,都在src文件夹中。然而,当我运行它时,我得到: 错误:找不到或加载主类

  • 问题内容: 我试图将HelloWorld放在.jar文件中并运行它,但是它不起作用。我创建了Java文件并在程序中键入内容,然后用cmd编写: 而且有效。然后我进入 得到了输出 然后我进入 第一行有效,而第二行却给我一个错误: 当我尝试使用64位jre7 \ bin,jdk1.7.0_51 \ bin,jdk1.7.0_51 \ jre \ bin中的java.exe文件打开它时,我得到的输出是(

  • 我试图将HelloWorld放入一个.jar文件并运行它,但它不起作用。我创建了java文件并在程序中键入,然后用cmd写到: 而且奏效了。然后我进去了 并得到了输出 这与我尝试用64位JRE7\bin、JDK1.7.0_51\bin、JDK1.7.0_51\jre\bin和32位JRE7\bin中的java.exe文件打开它时(在快速关闭的窗口中)得到的输出相同。我卸载并重新安装了jre和jdk

  • 问题内容: 我通过cmd.exe在Windows 7上使用Java SDK 1.7。直到几个小时前,一切突然都无法正常运行,突然之间我无法运行编译的类文件,标题中始终显示错误。 我似乎能够编译My.java文件,但是无法运行生成的类文件(My.class)。我经常收到错误“错误:找不到或加载主类My.class”。我已经尝试了多个其他类文件,都导致了相同的问题。 如果您想知道,我的“路径”环境变量