启动一个简单的本地类文件



我在本地目录中有一个.class文件,由以下jasmin代码组装而成:

.class public default_class
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit locals 10
.limit stack 10
invokestatic main_65428301()I
return
.end method
.method public static main_65428301()I
.limit locals 10
.limit stack 10
ldc "foobar"
astore_0
iconst_0
ireturn
.end method

当我执行java -jar jasmine .jar测试时。. j所有的编译和我得到。class文件,但我不能启动它与java default_class,因为我得到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: 
    at default_class.main(test.j)
Caused by: java.lang.ClassNotFoundException: 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 1 more

My JAVA_HOME is:

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

和classpath只包含我的当前目录(这个.class文件所在的目录)。我该加点什么吗?

编辑:我用来启动类的命令是java default_class

EDIT2:好了,我终于知道是哪里出了问题了!类名必须以大写字母开头!这解决了我的问题!无论如何,感谢所有试图帮助我的人!

您通常需要:

java -cp . NameOfClassWithMainMethod

运行当前目录中的单个类文件。然而,如果仔细阅读堆栈跟踪,就会发现Java找到了主类和主方法,但找不到其他东西。从你发布的代码来看,我看不出什么。

运行
java -verbose:class ......

可以说明这种情况,就像使用as调试器来观察类装入器的工作和运行一样。

你的错误信息显示:

java.lang.ClassNotFoundException:

但是这个消息的格式通常是这样的:

. lang。ClassNotFoundException: SomeNonExistingClass

为什么没有找到的类的名称丢失了?因为在示例中有一条指令引用了一个空类名(")。因此,您需要查找忘记指定类名的指令。在这里:

invokestatic main_65428301()I

应该是:

invokestatic default_class/main_65428301()I

这将解决您的问题。

你写的是:

编辑2:好了,我终于知道是哪里不对了!类名必须以大写字母开头!这解决了我的问题!无论如何,感谢所有试图帮助我的人!

因为既没有任何迹象表明这可能是一个原因,也不是实际情况。

相关内容

  • 没有找到相关文章

最新更新