【问题标题】:Run program java with attributes from command line [duplicate]从命令行运行带有属性的程序java [重复]
【发布时间】:2014-04-01 08:15:05
【问题描述】:

我从一个简单的代码(在 Eclipse 中)生成了 test.jar 文件:

package testJawka;

public class VarArgsDemo {

  public static void main(String[] args) {
      if (args.equals("1")){
            System.out.println("test 1");
        } else if (args.equals("2")){
            System.out.println("test 2");
        }
  }
}

在命令行(win7)中的结果是这样的:

C:\DATA>java -jar test.jar -D 1
Exception in thread "main" java.lang.UnsupportedClassVersionError: testJawka/VarArgsDemo : Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: testJawka.VarArgsDemo. Program will exit.

一般来说,我想检查它是如何工作的,我的意思是 jar 文件具有一些属性。可能是jar文件有问题。有谁能帮帮我吗?

【问题讨论】:

  • if (args.equals("1")) args 是 String[]"1"String。您的意思是检查第一个参数吗?
  • 请参阅stackoverflow.com/questions/10382929/… 回答您的问题
  • 这对我来说是新的,在这个例子中我想运行带有属性的程序,所以如果我设置 '1' 应该显示“test 1”,如果设置 '2' 那么“test 2”?跨度>

标签: java eclipse jar attributes main


【解决方案1】:

不支持的major.minor 51.0版

意思是,源代码是用较高的JDK版本编译的,而它是用较低的JDK版本运行的。

【讨论】:

  • 我改成jre1.6就OK了。没有错误。
  • @Wojtek:那么,有什么问题?
【解决方案2】:

我有两个用于您的代码的 cmets:

  1. 正如 fge 所说,Main 函数中的 args 具有数组类型,而不是 String,您应该像这样访问 args,args_0 = args[0],像这样。

  2. 我没有检查,但是我认为Java会将'-D'提示符视为args,换句话说,您程序中的args应该有两个参数,args[0] = "-D"args[1] = "1" .

在这里评论:

package testJawka;

public class VarArgsDemo {

public static void main(String[] args) {

    if (args.length > 0) {
        if (args[0].equals("1")) {
            System.out.println("test 1");
        } else if (args[0].equals("2")) {
            System.out.println("test 2");
        }
    }

}
}

并使用命令“java -jar test.jar 1”,应该可以,试试吧。

以防万一您可能遇到路径和包问题: 假设您将项目“testJawka”放在目录“C:\tmp”下。 您应该在“c:\tmp\testJawka”中访问,打开命令行:

c:\tmp\testJawka>javac VarArgsDemo.java

这应该会在“c:\tmp\testJawka”下生成 .class 文件“VarArgsDemo.class”。

然后你可以在命令行中执行程序,但记住在命令行中将你的目录更改为“c:\tmp”:

c:\tmp>java testJawka.VarArgsDemo 1

如果要生成可执行的jar文件,在命令行中进入目录“c:\tmp”:

c:\tmp>jar -cef testJawka.VarArgsDemo test.jar testJawka

这将在“c:\tmp”目录下生成 test.jar 文件。

然后在“c:\tmp”目录下,在命令行中执行jar文件:

java -jar test.jar 1

希望对你有用。

【讨论】:

  • 很遗憾,它不起作用。
  • 查看我的评论并再试一次,每次你想通过它的索引从数组中获取参数时,你应该检查数组的长度。
  • 好的。我用“for循环”解决了这个问题:)谢谢大家。
猜你喜欢
  • 2014-04-27
  • 2012-04-10
  • 1970-01-01
  • 2021-04-08
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
相关资源
最近更新 更多