我写了一个很简单的测试程序 ,代码如下:package UnionCast.LogParse;import java.util.*;
public class mytest
{
    public static void main(String[] args)
    {
         System.out.println("hello world");
    }
}在  Linux 下 我自己的目录下 执行 
[root@test171 LogParse]# javac mytest.java
可以通过
但执行 
[root@test171 LogParse]# java mytest
就会报错:
Exception in thread "main" java.lang.NoClassDefFoundError: mytest (wrong name: LogParse/UnionCast/LogParse/mytest)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
如果把程序头部的 package UnionCast.LogParse;  去掉,就可以正常输出 hello world 请教该如何解决?

解决方案 »

  1.   

    看你的样子,mytest不是在 UnionCast/LogParse目录下面, 你需要建立两个文件夹,结构UnionCast/LogParse,然后在UnionCast同级目录中  javac UnionCast.LogParse.mytest.javajava UnionCast.LogParse.mytest
    对包的理解估计要细想一下
      

  2.   

    (wrong name: LogParse/UnionCast/LogParse/mytest)是不是当前目录设为logParse了?怎么目录是这样的?
      

  3.   

    回1L  我的mytest 就是在 UnionCast/LogParse目录下面回2L   我就是在 LogParse/UnionCast/LogParse 这个目录下边建了一个 mytest.java 的程序,用javac 可以编译通过
      

  4.   

    用了1L 的方法
    在 [root@test171 UnionCast]# javac UnionCast.LogParse.mytest.java提示 error: cannot read: UnionCast.LogParse.mytest.java
      

  5.   

    是不是需要将 ClassPath 指向我这个目录?
      

  6.   

    不,你执行的时候要在UnionCast目录的上级目录下
    用java UnionCast.LogParse.mytest
      

  7.   

    set classpath  你加上一个 .;表示在当前目录
      

  8.   

    执行过程改为java -cp . UnionCast.LogParse.mytest
      

  9.   

    你是在UnionCast的上级目录下执行的么?
      

  10.   

    装个eclipse吧,就不会这么麻烦了.
      

  11.   

    如果有包的话,你退出到最外层,
    javac UnionCast\LogParse\mytest.java
    java UnionCast\LogParse\mytest
    你再试试
      

  12.   

    同时,你要确保你的mytest在linux有执行的权限,
      

  13.   

    javac 编译 如果带包 需要加 javac mytest.java -d . 才会按路径编译 或者加上绝对路径
      

  14.   

    你的终端得在UnionCast外面。
    用java UnionCast.LogParse.mytest运行。
      

  15.   

    用export命令
    编辑path和classpath
      

  16.   

    执行的时候,必须在package指定的包外面执行,例如你的java程序中的包名为cn.com.study.helloworld,而这个包的上级目录名为src,你的java类名为HelloWorld,也就是说在目录src下有个包cn.com.study.helloworld,此包下有个类HelloWorld,那么你执行这个程序的时候,必须在src目录下,输入java cn.com.study.helloworld.HelloWorld才行!