我正在尝试从linux命令行运行test.class
文件。我使用生成javac test.java
文件的test.class
编译了该文件。当我运行命令java test
时,它会抛出一个未找到类的异常。我也尝试使用相同的结果指定包名称。这是输出,有人可以帮忙吗?根据谷歌搜索,我相信我的语法是正确的。
[root@localhost usr]# java test
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: testJava/test)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: test. Program will exit.
答案 0 :(得分:8)
您需要使用javac编译.java文件:
javac MyFile.java
然后使用java
运行该文件 java MyFile
如果你这样做但它仍然不起作用,那意味着你需要确保文件中的文件和类名具有相同的名称......所以MyFile.java包含
class MyFile
{
// ...
public static void main(String[] args)
{
// ...
}
// ...
}
答案 1 :(得分:4)
使用
来自testJava的父目录的java testJava.test
答案 2 :(得分:1)
假设你的班级是这样的:
package javaTest;
public class test{
public static void main(String[] a){
System.out.println("Test");
}
}
然后编译并运行该文件,基本上就是这样做的:
$ ls
testJava
$ ls testJava
test.java
$ javac testJava/test.java
$ java testJava.test
Test
这意味着您必须使用其完全限定名称来运行该类,该名称包括该类的包名称。您还必须从包含该根目录的目录。你的包裹。 (除非您使用-cp
标志指定“root”目录。)
答案 3 :(得分:1)