我正在关注Princeton website上的java教程。
我正在运行debian sqeeze 64bit
,我已经安装了Sun java版本6。
我可以使用终端和Eclipse IDE编译并运行基本hello world
程序而没有任何问题。
问题是:
当我尝试编译并运行一个程序时,需要一个参数输入,例如:
public class RandomSeq {
public static void main(String[] args) {
// command-line argument
int N = Integer.parseInt(args[0]);
// generate and print N numbers between 0 and 1
for (int i = 0; i < N; i++) {
System.out.println(Math.random());
}
}
}
我可以在Eclipse上运行它来放置一个整数参数,但是它在终端上不起作用。
我收到此错误:
emes @ debian:〜/ Documents / workspace / IOput / src / randomSeq $ java RandomSeq 21 线程“main”中的异常java.lang.NoClassDefFoundError:RandomSeq(错误名称:randomSeq / RandomSeq) at java.lang.ClassLoader.defineClass1(Native Method) 在java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access $ 000(URLClassLoader.java:58) 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 找不到主类:RandomSeq。程序将退出。
我尝试更新/etc/profile
以在PATH变量中包含java-6-sun
。
我不确定,从这里尝试一下。
答案 0 :(得分:2)
显然,您正在尝试从Eclipse项目的src
文件夹运行程序。 src
代表“来源”。程序的可执行版本(已编译的类)不在src
;它位于bin
,代表“二进制”,即机器代码。
使用命令行时,首先应编译程序:
javac MyClass.java
然后运行它:
java MyClass
但请不要在Eclipse项目的目录结构中执行此操作,否则您将在此位置创建Eclipse不期望的其他文件(类文件)。
另外,也许你在一个包里面。如果您在其包文件夹中,则无法运行类。您需要位于包层次结构的顶层。
示例:假设您的类位于名为mypackage
的包中。然后在someFolder/mypackage/MyClass.java
中,你会有类似的东西:
package mypackage;
class MyClass {
...
}
编译代码后,您必须在somefolder
并发出shell命令:
java mypackage.MyClass
答案 1 :(得分:1)
看起来你的班级有一个包
package randomSeq;
public class RandomSeq {
如果是这样,那么当它启动时,它应该位于 randomSeq 文件夹中,该文件夹的根目录应该在你的类路径中,并且必须在调用时指定包。
因此,如果您的.class文件位于bin / randomSeq中,那么您可以使用 java -cp bin randomSeq.RandomSeq 21
运行它答案 2 :(得分:0)
不要打扰参数,因为这会产生运行时空指针异常 问题是你的类路径。
在运行java RandomSeq的目录中创建一个列表(ls或dir)。
你有.class file
吗?如果没有先运行javac RandomSeq.java
来生成类文件