我在新建了一个类 Trangle 用来计算三角形面积及判断是否为三角形的。
package four.six;
public class Trangle
{
    double sideA,sideB,sideC;
    boolean boo;
    public Trangle(double a,double b,double c)
    {
        sideA=a;sideB=b;sideC=c;
        if(a+b>c&&a+c>b&&b+c>a)
        {
         System.out.println("我是一个三角形");
         boo=true;
        }
        else
        {
            System.out.println("我不是一个三角形");
            boo=false;
        }
    }
    public void 计算面积()
    {
        if(boo==true)
        {
            double p=(sideA+sideB+sideC)/2.0;
            double area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
            System.out.println("面积是:" + area);
        }
        else
        {
            System.out.println("不是一个三角形,不能计算面积");
        }
    }
    public void 修改三边(double a,double b,double c)
    {
        sideA=a;sideB=b;sideC=c;
        if(a+b>c&&a+c>b&&b+c>a)
        {
            boo=true;
        }
        else
        {
            boo=false;
        }
    }
}
存放在d:\java\four\six下
再用import引入这个包
import four.six.*;
class Example4_8
{
    public static void main (String args[])
    {
        Trangle trangle=new Trangle(12,3,1);
        trangle.计算面积();
        trangle.修改三边(3,4,5);
        trangle.计算面积();
    }
}
存放在d:\java\three下
最后编译能通过,但运行是出错,提示是:
Exception in thread "main" java.lang.NoClassDefFoundError: four4/Example4_8 (wro
ng name: Example4_8)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
 但如果我把两个放在同一个目录下就能正常运行,请问这是怎么回事,本人新人一个,请见谅!!

解决方案 »

  1.   

    但如果我把两个放在同一个目录下就能正常运行,请问这是怎么回事,
    不然你的程序找不到啊。package其实和路劲是对应的。你的package是com.xxx那最终的路径会是/com/xxx
      

  2.   

    其实java编译的都是class文件。。
    确保你class文件的在你导入的包的位置就行了 java.lang.NoClassDefFoundError: four4/Example4_8
    这就是告诉你去four4目录下没找到相应class的意思。
      

  3.   

    应该是因为没找到class文件吧。修改claapath的值,在classpath中加上d:\java\four\six;应该就可以了
      

  4.   

    是的,我把包文件夹放在程序的目录下就可以了。可我在系统的环境变量里将我的目录 d:\java 添加到path中后,将两文件分开存放还是不能运行。不是说添加了path后系统会寻找调用对应路径的文件的吗?
      

  5.   

    是calsspath,系统会根据路径去寻找.class文件
      

  6.   

    是的,我把包文件夹放在程序的目录下就可以了。可我在系统的环境变量里将我的目录 d:\java 添加到path中后,将两文件分开存放还是不能运行。不是说添加了path后系统会寻找调用对应路径的文件的吗?path是用来找exe的
      

  7.   

    A.Trangle包路径:four.six.Trangle
    B.Example4_8包路径:Example4_8所以,要么
    1.把Trangle.class打包成jar文件(放到与Example4_8)同一目录,运行如下:
    2.在Example4_8里增加:package three;
    3.直接把 four/six/Trangle.class复制到three目录下
    因为你运行 Example4_8的时候,程序会在如下路径加载类
       <当前路径>/four/six/Trangle.class
    就可以了!
      

  8.   

    我在系统变量下增加了“classpath” ,将我包所放文件夹的父文件夹路径添加进去,就可以了。