为什么这个Java jar不工作?

时间:2012-01-02 04:16:19

标签: java runtime

当我运行下面的代码时,我收到以下错误。

C:\Documents and Settings\BOS\Desktop\test>java -jar test.jar
Exception in thread "main" java.lang.NullPointerException
        at sun.launcher.LauncherHelper.getMainClassFromJar(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

我在\ test directory = crimson.jar robosuite-api.jar和test.jar中有这些文件。

以下是他们推出机器人的例子?

import com.kapowtech.robosuite.api.java.rql.*;
public class SimpleRunRobot {
public static void main(String[] args) {
if (args.length < 1) {
System.out.println("Usage: RunRobot <robotURL>");
System.exit(1);
}
try {
// Run the robot
RQLResult result =
RobotExecutor.getRobotExecutor().execute(args[0]);
// Output the results
System.out.println(result);
}
catch (RQLException e) {
System.out.println("An error occurred: " + e);
}
}
}

为什么这会给我带来Unknown Source错误?

 package robosuite.robots;

    import com.kapowtech.robosuite.api.java.rql.RQLException;
    import com.kapowtech.robosuite.api.java.rql.RQLResult;
    import com.kapowtech.robosuite.api.java.rql.RobotExecutor;
    import com.kapowtech.robosuite.api.java.rql.construct.RQLObjects;


    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;



       /**
         * 
         * <p>
         * This is an autogenerated class. It has been generated from the
         * <code>library:/test.robot</code> file.
         *
         * @author RoboSuite
         */
    public class Test {

        // ----------------------------------------------------------------------
        // Class fields
        // ----------------------------------------------------------------------

        private static final String ROBOT_URL = "library:/test.robot";
        private static final RobotExecutor ROBOT_EXECUTOR = RobotExecutor.getRobotExecutor(SingletonRQLEngine.getInstance());
        private static final Converter CONVERTER = Converter.getInstance();



  // ----------------------------------------------------------------------
    // Constructors
    // ----------------------------------------------------------------------

    /**
     * Creates a new Test instance that can be used to execute the
     * <code>library:/test.robot</code>.
     */
        public Test() {
        }

        // ----------------------------------------------------------------------
        // Instance methods
        // ----------------------------------------------------------------------

        /**
         * Executes this robot.
         * 
         * @param test an input object to the robot. 
         * @return an array of output objects.
         * @throws java.io.IOException if the execution fails for some reason.
         */
        public Testst[] run(Test0 test) throws java.io.IOException {
            try {
                // Prepare input objects
                List parameters = new ArrayList();
                parameters.add(test);

                RQLObjects inputObjects = CONVERTER.convertBeansToRQLObjects(parameters);

                // Run robot
                RQLResult rqlResult = ROBOT_EXECUTOR.execute(ROBOT_URL, inputObjects);

                // Extract output objects
                RQLObjects outputObjects = rqlResult.getOutputObjects();
                List result = CONVERTER.convertRQLObjectsToBeans(outputObjects);
                return (Testst[]) result.toArray(new Testst[result.size()]);
            } catch (RQLException e) {
                throw new IOException(e.toString());
            }
        }


        /* ------------------------------------------------------------------- */
    }

4 个答案:

答案 0 :(得分:1)

如果您使用Java 7,请阅读此内容。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7067922

答案 1 :(得分:0)

您必须在META-INF / manifest文件中添加具有main()方法的类的名称。

以下是包含更多信息的链接: http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html

感谢。

答案 2 :(得分:0)

尝试

java -cp test.jar

还包括您的其他.jar文件

如果您使用清单文件,请确保已定义主类。 例如。

Main-Class: test.MyApp

答案 3 :(得分:0)

  

为什么这会给我带来Unknown Source错误?

“未知来源”消息不是错误。 JVM告诉您正在执行的代码是在没有任何调试信息的情况下编译的;例如使用-gLnone选项。因此,通常包含在堆栈跟踪中的源文件名和行号不可用。

在这种情况下,代码是JVM内部的一些特定于平台的东西。别担心...