解释时出错,请指点迷津 (50分)

  • 主题发起人 主题发起人 c3411080
  • 开始时间 开始时间
C

c3411080

Unregistered / Unconfirmed
GUEST, unregistred user!
把类打包之后在另外一个类中引用可以顺利编译,当我用java解释时测试时却出错了,“Exception in thread "main" java.lang.NoClassDefFoundError: Line”,请问这是什么原因。
详细情况如下:
我先把一个类打包,放在C:/Javastuff/Geometry下
package Geometry;
public class Point {

public Point(double xval,double yval)
{
x=xval;
y=yval;
}

public Point(final Point apoint)
{
x=apoint.x;
y=apoint.y;
}
public void move(double xdelta,double ydelta)
{
x+=xdelta;
y+=ydelta;
}
publicdo
uble stance(final Point apoint)
{
return Math.sqrt((x-apoint.x)*(x-apoint.x)+(y-apoint.y)*(y-apoint.y));
}
privatedo
uble x;
privatedo
uble y;
}
然后我再定义一个类保存为Line

import Geometry.*;
public class Line {
public static void main(String args[])
{
Point ball3=new Point(2,2);
}
}
我用:C:/JAVA>javac -classpath "c:/Javastuff" Line.java可以顺利编译
当我用:C:/JAVA>java -classpath "c:/Javastuff" Line
却出错:Exception in thread "main" java.lang.NoClassDefFoundError: Line”,
 
把含有main()程序入口点的java文件(Line.java)放在包外,
在同一个包内就不要用import Geometry.*;直接可以找的到所需要引用的类文件
 
同意ZRWeng 的。
 
我现在是在学自己怎样打包,我把 Point 打包然后在其它目录下建类Line来引用它,老是出错的
 
你打包错误!打包应该退回到上级目录打包!否则包的路径错1
 
to only you
我先定义一个类如下:
package Geometry;
public class Point {

public Point(double xval,double yval)
{
x=xval;
y=yval;
}

public Point(final Point apoint)
{
x=apoint.x;
y=apoint.y;
}
public void move(double xdelta,double ydelta)
{
x+=xdelta;
y+=ydelta;
}
publicdo
uble stance(final Point apoint)
{
return Math.sqrt((x-apoint.x)*(x-apoint.x)+(y-apoint.y)*(y-apoint.y));
}
privatedo
uble x;
privatedo
uble y;
}
把它放在:C:/Javastuff/Geometry目标下,请问这样打包对吗?
然后我再其它目录下再定义一个类来引用刚才打包的类
import Geometry.*;
public class Line {
public static void main(String args[])
{
Point ball3=new Point(2,2);
}
}

为什么我这样运行不错,,哪里错了

 
你退回到上级目录测试一下,有的时候可能是你编译得类classpath路径不对!
方法是不指定classpath,退回指:C:/Javastuff,然后javac ./Geometry/*.java
 
only you
还是不行,问题退回到类打包这里
package Geometry;
public class Point {

public Point(double xval,double yval)
{
x=xval;
y=yval;
}

public Point(final Point apoint)
{
x=apoint.x;
y=apoint.y;
}
public void move(double xdelta,double ydelta)
{
x+=xdelta;
y+=ydelta;
}
publicdo
uble stance(final Point apoint)
{
return Math.sqrt((x-apoint.x)*(x-apoint.x)+(y-apoint.y)*(y-apoint.y));
}
privatedo
uble x;
privatedo
uble y;
public static void main(String args[])
{
System.out.printlt("测试");
}
}

把它放在:C:/Javastuff/Geometry目标下
这样我可不可以java 类Point就像没有打包前这样的,如果可以该怎样运行呢
 
其实主要是个路径问题,80%的类访问问题都是这个原因!classpath也是告诉classloader类载入的搜索路径!包也只是个路径得描述!不要给迷惑了!其实你只要想到我的类有一种有效的方法可以载入包中得类就可以了!如果你得包放在当前路径下!则包中得路径结构必须和你引入的次序一样!放在classpath下也是这样!
 
我现在是把Point 包后直接运行它也出问题的。Exception in thread "main" java.lang.NoClassDefFoundError:HelloWorld
 
路径不对
 
那我把Point打包之后怎样运行类Point呢
 
我运行了你的程序,没有问题!
我将你的Point.java置于C:/Javastuff/Geometry中,将Line.java置于D:/myjava中。然后设置classpath=.;c:/Javastuff/Geometry。设好后直接到D:/myjava>javac Line.java D:/myjava>java Line 运行成功! 要记得在classpath中加上当前目录( . )否则出现Exception in thread "main" java.lang.NoClassDefFoundError: Line”
 
to huangyuanqin
classpath=.;c:/Javastuff/Geometry是不是加在环境变量中呢?
我加进去之后再编译的时候显示找不到包Geometry,不知这是什么原因呢
 
你还没运行成功?你要确保当前路径下无Point.java或Point.class,否则跟类路径下的相冲突!
 
后退
顶部