我的java程序出现异常,到底是为什么?

编译打包和其他
回复
头像
lichuanbao1234
帖子: 15
注册时间: 2008-11-10 20:05

我的java程序出现异常,到底是为什么?

#1

帖子 lichuanbao1234 » 2008-11-24 14:08

我的系统是ubuntu7.10, jdk1.6.0。可是我些的程序编译的时候是对的,但是运行就会出现异常。我的源程序是这样的:
package com.briup.ch07;
/**
the core java of page 187
*/
import java.util.*;
import java.lang.reflect.*;

public class ReflectionTest{
public static void main(String[] args){
String name;
if (args.length > 0) name = args[0];
else{
Scanner in = new Scanner(System.in);
System.out.println("Enter class name(e.g java.util.Date):");
name = in.next();
}
try{
Class cl = Class.forName(name);
Class supercl = cl.getSuperclass();
String modifiers = Modifier.toString(cl.getModifiers());
if(modifiers.length() > 0) System.out.print(modifiers + " ");
System.out.print("class" + name);
if(supercl != null && supercl!= Object.class)
System.out.print("extends" + supercl.getName());
System.out.print("\n{\n");
printConstructors(cl);
System.out.println();
printMethods(cl);
System.out.println();
printFields(cl);
System.out.println("}");
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
System.exit(0);
}
public static void printConstructors(Class cl){
Constructor[] constructors = cl.getDeclaredConstructors();
for(int i=0;i<constructors.length;i++){
Constructor c = constructors;
String name = c.getName();
System.out.print(" ");
String modifiers = Modifier.toString(c.getModifiers());
if(modifiers.length() > 0) System.out.print(modifiers + " ");
System.out.print(name + "(");
Class[] paramTypes = c.getParameterTypes();
for(int j = 0;j <paramTypes.length;j++) {
if(j>0) System.out.print(", ");
System.out.print(paramTypes[j].getName());
}
System.out.println(");");
}
}
public static void printMethods(Class cl){
Method[] methods = cl.getDeclaredMethods();
for(int i =0;i<methods.length;i++){
Method m = methods;
Class retType = m.getReturnType();
String name = m.getName();
System.out.print(" ");
String modifiers = Modifier.toString(m.getModifiers());
if(modifiers.length() > 0) System.out.print(modifiers + " ");
System.out.print(retType.getName() + " " + name + "(");
Class[] paramTypes = m.getParameterTypes();
for(int j=0;j<paramTypes.length;j++ ){
if(j>0) System.out.print(",");
System.out.print(paramTypes[j].getName());
}
System.out.println(");");
}
}
public static void printFields(Class cl){
Field[] fields = cl.getDeclaredFields();
for(int i =0;i<fields.length;i++ ){
Field f = fields;
Class type = f.getType();
String name = f.getName();
System.out.print(" ");
String modifiers = Modifier.toString(f.getModifiers());
if(modifiers.length() > 0) System.out.print(modifiers + " ");
System.out.print(type.getName() + " " + name + ";");
}
}
}
结果:Exception in thread "main" java.lang.NoClassDefFoundError: java.util.Scanner
at com.briup.ch07.ReflectionTest.main(ReflectionTest.java:14)
请问这是什么原因?
头像
lichuanbao1234
帖子: 15
注册时间: 2008-11-10 20:05

Re: 我的java程序出现异常,到底是为什么?

#2

帖子 lichuanbao1234 » 2008-11-25 21:40

补充一下。我的jsk设置应当是正确的,应为我运行其它的程序都是正确的。就是这个程序不正确。显示这个异常我很是纳闷,希望高手们指点一下。
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: 我的java程序出现异常,到底是为什么?

#3

帖子 oneleaf » 2008-11-25 21:50

java.lang.NoClassDefFoundError: java.util.Scanner
头像
lichuanbao1234
帖子: 15
注册时间: 2008-11-10 20:05

Re: 我的java程序出现异常,到底是为什么?

#4

帖子 lichuanbao1234 » 2008-11-26 9:16

我知道了,ubuntu里面的jdk默认的是1。5。0 .需要修该一下连接文件。也就是系统中有两个JVM实现,而且gij JVM还被其它的Ubuntu工具或软件使用;所以这种情况下就得使用Debian提供的"update-alternatives"工具来完成程序多版本实现的选择了:
sudo update-alternatives --display java
发现系统只列举了gij JVM;因为jdk5是通过手动解压安装的。
现在输入下面的两行命令:
sudo update-alternatives --install /usr/bin/java java /etc/jdk/jdk1.6.0_10/bin/java 60
sudo update-alternatives --install /usr/bin/java java /usr/bin/gij-4.2 40
注意1,2行尾的60,40是优先级;现在把JDK5设为了首选;
输入: ls -l /etc/alternatives/java 发现JVM已经指向了jdk5的解压目录:
lrwxrwxrwx 1 root root 35 2008-01-25 17:55 /etc/alternatives/java ->
/etc.jdk/jdk1.6.0_10/bin/java
现在再执行:java -version
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing)
头像
xc1427
帖子: 276
注册时间: 2008-10-11 4:11
来自: 瑞金无线电学校
联系:

Re: 我的java程序出现异常,到底是为什么?

#5

帖子 xc1427 » 2009-11-24 21:52

楼上正解。应该用java6的解释器和编译器。

Scanner类在java5和java6中的情形是不同的。

也可参这里“http://wiki.ubuntu.org.cn/Qref/More#JAV ... 8.E5.85.B3
其中‘设置当前默认的java解释器和编译器’。
You never know if you don't try
回复