1、1.java.lang.NullPointerException 原因是:有空指针,有地址没赋值 2.Exception in thread "main" java.lang.ArithmeticException: / by zero 原因是除数是0 3.ArrayIndexOutOfBoundsException 原因是:数组越界 4.java.lang.NumberFormatException 原因是:数字格式化有问题 5.Unhandled exception type Exception 原因
2、是:没有进行异常处理 6.进行国际化操作的时候遇到这样的错误:Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name Message, locale zh_CN 答:因为在命令提示符中,是没有错误的 解决方法是:在myeclipse中,会出现这个错误 java国际化之Can't find bundle for base name 1.初步学习 最近在学习ResourseBundle时遇到了“Can't find bun
3、dle for base name ”这个错误搞了很久才解决了。原因就是类路径问题要将属性文件放在类路径中!百度里很多都是教程但没有涉及到解决方法! 2.中文显示: 测试文件 java 代码 package com.lht.ResourseBundleStudy; import java.util.ResourceBundle; public class ResourseBundleDemo { public static void main(String[] args) { ResourceBundle resource = ResourceBundle.getBu
4、ndle("test"); System.out.print(resource.getString("msg0") + "!"); System.out.println(resource.getString("msg1") + "!"); } } test.properties msg0="Hello World" msg1="da jia hao" 开始自己测试的时候:将属性文件放在bin/下也试过也不行无赖中就在google中搜索了一下终于在sun的java论坛 ( I've solved the problem the best way possible
5、 Basically what i've done is added a new class folder named config to the project home dir. Then i added this classfolder to the classpath in project properties. After doing all of this you only need to reference the properties file by "Email". Hope this helps anyone else who is having similiar pr
6、oblems. 基本意思就是在src下建立classes(名字无所谓)文件夹将属性文件存放在下面,然后将这个文件夹加入类路径中!运行就可以了: 加入类路径的方法:你的工程文件夹->properties->选择Libraries选项卡->Add Class Folder将刚才建立的文件夹加入就可以了! 结果如下: "Hello World"!"da jia hao";! 2.中文显示 在classes目录下建立message_CH.properties内容如下: ms0="大家好" 同样用上面的测试文件! 结果如下:"?ó????"! 乱码怎么回事啊! 在百度里搜索后
7、找到了答案有以为网友写的很清楚: 下面引用如下: 原理 Property文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。而在Java程序中读取Property文件的时候使用的是Unicode编码方式,这种编码方式不同会导致中文乱码。因此需要将Property文件中的中文字符转化成Unicode编码方式才能正常显示中文。 解决办法: Java提供了专门的工具对Property文件进行Unicode转化,这种工具就是native2ascii,它在JDK安装环境的bin目录下。 native2ascii 工具将带有本机编码字符(非拉丁 1 和非单一码字符)的文件转换成
8、带有Unicode编码字符的文件。 假设需要转化的属性文件为:D:/src/resources.properties(含有中文字符) 转化后的属性文件为:D:/classes/resources.properties(中文字符统一转化为Unicode) 那么使用如下命令 JAVA_HOME/bin/native2ascii -encoding GBK D:/src/resources.properties D:/classes/resources.properties 就能将含有中文字符的属性文件转化成单一Unicode编码方式的属性文件。中文乱码自然会被解决。 通过上面的方法我将
9、生成的文件打开一看内容如下: ch="/u5927/u5bb6/u597d" 再运行结果如下: "大家好" (2)另一种解决办法:Can't find bundle for base name Struts2国际化异常处理 这是找不到指定文件; 你必须把 .properties 文件,放在与这个调用文件.java 相同的目录里; Hello.java在workspace\test\src\com\lj\guojiehua下 hello_en_US.properties必须在workspace\test\src下 hello_zh_CN.properties必须在wo
10、rkspace\test\src下 其实原因是我虽然在build path 里面 加了\pruway\source\source\config,但是系统编译的时候,在classes里面应该会自动产生resource_en_US.properties,可是实际情况是classes包下面没有产生,故我删掉重加,再编译结果发现通过了。。 就是说,只要你buildpath路径对了,该路径下也有resoucebudle需要的类,那么系统会自动在classes里面自动编译产生这些类的。所以,先检查classes里,有没有生成对应的resource_en_US.properties,如果没有,那么检查bu
11、ild path 路径下有没有对应的properties类,如果有,那么证明系统编译没有编译完整,删掉path,重新add foler,加入,再编译,检查classes下有无。 如果都有,那么证明成功。 10.java.lang.IllegalThreadStateException 解决办法:不能启动两次线程 11.java.lang.NoSuchMethodError 答:必须有一个 public static void main(String[] args){ //这里是入口 } 作为入口点,启动java虚拟机时虚拟机会找这个方法,如果没有就报exc
12、eption in thread “main”java.lang.nosuchmethoderror .UnknownHostException : 原始出错程序是这样的: 解答方式:import .InetAddress ; public class a{ public static void main(String args[]) throws Exception {// 所有异常抛出 InetAddress locAdd = null ; InetAddress remAdd = null ; locAdd = InetAddres
13、s.getLocalHost() ;// 得到本机 remAdd = InetAddress.getByName(" ; System.out.println("本机的IP地址:" + locAdd.getHostAddress()) ; System.out.println("MLDNJAVA的IP地址:" + remAdd.getHostAddress()) ; System.out.println("本机是否可达:" + locAdd.isReachable(5000)) ; } //5000代表代数 }; 运行后结果为:
14、如果注释掉remAdd = InetAddress.getByName(" ; 运行结果又是这样的: 上述程序的解决办法是:将 remAdd = InetAddress.getByName(" ;改成 程序运行结果如下: 完成实验要求,但是这里就有一个问题了,为什么去掉http//和后面的/的就运行的了呢? (2)但是对于这个极其相似的程序却可以运行出结果: import .InetAddress ; public class b { public static void main(String args[])throws Exception{
15、 InetAddress address=InetAddress.getByName(""); System.out.println("ip: "+address.getHostAddress()); System.out.println("host: "+address.getHostName()); System.out.println("canonical host name: "+address.getCanonicalHostName()); byte[] bytes=address.getAddress();
16、for(byte b:bytes) { if(b>=0)System.out.print(b); else System.out.print(256+b); } } } 运行结果为: 13.运行下列程序出现了这样的错误,这是线程的知识,一个线程如果启动了,再启动一个的时候就会报错:java.lang.IllegalThreadStateException 程序如下:class thrund extends Thread{ private String name; public thrund(String name){
17、this.name=name; } public void run(){ //线程完成的动作 for(int j=0;j<4;j++){ System.out.println(name+"第"+j+"个"); } } }; public class a { public static void main(String agrs[]){ thrund th1=new thrund("线程A");//实例化一个线程对象 th1.start(); //调用线程主体 th1.start();
18、 //调用线程主体 } }; 运行结果如下: 14.The public type abc must be defined in its own file这样的警告是出现在我下面这样的程序中的: 所以我在百度上输入这样的问题:java程序中两个类为什么不能同时有public(其中有一个是主方法)? 得到的回答是这样的: 因为一个GM规定一个类中只能有一个PUBLIC 的 而且源文件的名字只能和PUBLKIC 属性的类去一个名字。 另一种回答是这样的:同个源文件有多个公共类,编译
19、器就找不到应该执行的main方法了
15.运行下列泛型程序时,出现一下错误:
程序:class add
20、der.p("你好,邱林和"); fun(adder); public static void fun(add> temp){ System.out.println("内容"+temp); } } } 出现了如下错误: 其中这个void is an invalid type for the variable fun这个错误的解释时: 第一步:检查拼写是否错误; 第二步:检查void actionPerformed(ActionEvent ae){}函数的位置,不能让它嵌套在别的函数里。我不知道为什么,但我这样
21、改对了。
通过这个观察上述代码确实发现这个fun方法被包含在了主方法中,所以导致这个错误,改成下列程序后,程序运行结果如下:
public class a{
public static void main (String args[]){
add
22、 public static void fun(add> temp){ System.out.println("内容"+temp); } } 运行结果如下: 16. 错误:java:Syntax error on token ";", , expected 17. 解释是这样的:int b=3; b=b-2; 应为这2行代码写的地方还处在声明定义阶段处。 就好象你脑子里想象着我有3块钱(第一行),但是又立马用这想象的3快去买物品(第二行) 所以卖东西的人肯定会说你(报错). 就是说,b=b-2这行代码处的位置 还处于声明阶段,没有在内存中给
23、他划分空间,你是不能操作的。要么声明为静态的,提前划分空间 17,运行以下程序时,报错: 程序为: public class a{ public static void main(String args[]){ Runtime run= Runtime.getRuntime(); System.out.println("JVM 最大内存量:"+run.maxMemory()); Process pro=null; //声明一个Process对象,接收启动的进程 try{ pro=run.exec("Thunder.exe"); //调用本机程序
24、必须进行异常处理 }catch(Exception e){ //打印异常信息 e.printStackTrace(); } try{ Thread.sleep(5000); }catch(Exception e){ e.printStackTrace(); } pro.destroy(); //结束此进程 } } 运行结果为: 这一句有问题,pro=run.exec("Thunder.exe"); //调用本机程序,必须进行异常处理 ,里面的Thunder.exe改成”notepad“
25、就有用,不知道为什么?
18. java.lang.ArrayStoreException
当运行下列程序时出现了这样的错误:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class a{
public static void main(String args[]){
List
26、ction
27、println(cl);
al.addAll(cl); //从Collection继承的方法,增加一组对象
String str[]=al.toArray(new String[] {}); //指定的泛型类型
System.out.print("指定数组类型"); //信息输出
for(int i=0;i 28、/信息输出
Object obj[]=al.toArray(); //直接返回对象数组
for(int i=0;i 29、ption:
Object x[] = new String[3];
x[0] = new Integer(0);
就这么简单。
怎么避免呢?关键就是元素的内容要正确。
你看你的代码:
private Object[] objects;
....
objects = new ObjectSet[size];
很明显这里用父类的引用指向了子类的实现。
那么给每个元素赋值的时候只能付这个子类对象及这个子类的后代。
你又将OBJECT赋值给它,那么就必须向下转型。
上述程序的解决办法是:
把:” List 30、List对象
Collection 31、 in use: JVM_Bind错误的可能性分析
I.就是当前端口已经有别的程序在占用着,所以要么把占用这个端口的程序关闭,要么重新换一个端口
II.端口号被占用,如果你有装oracle的话,有可能是oracle使用了8080端口,oracle安装后并且如果启动了OracleHttp服务会占用8080端口
III.我认为很可能是多启动了几次TOMCAT,在ECLIPSE下重复启动TOMCAT就会出现这个问题,你去调查一下看看是否是这个原因.
IV.如果不是windows操作系统,那么80端口已经被占用.如果是windows操作系统.请检查是否装有IIS.
V.启动了多个Tomcat 32、
我就是因为启动了两个Tomcat,所以才会报这样的错误,通常情况下, 多次启动Tomcat或者非正常关闭Myeclipse,但是占用端口的进程没有关闭,也会出现这样的错误。解决方法是关闭javaw.exe进程。
源程序是:
服务器端程序:
package a;
import .*;
import java.io.*;
public class Server{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter 33、out;
public Server(){
try{
//在服务器端指定端口10000创建队列长度为50的服务器端套接字
ss=new ServerSocket(10000);
while(true){
//告诉服务器不停地等待,直到有客户端连接到该Serversocket指定的端口
//一旦有客户端通过网络向该端口发送正确的连接请求
//该方法就会返回表示服务器与客户端连接已建立的Socket对象
socket=ss.accept();
String clientIP=socket.getInetAddres 34、s().getHostAddress();
String clientPort=":"+socket.getLocalPort();
System.out.println("A client come in !IP:"+clientIP+clientPort);
//获得客户端发送的信息
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=in.readLine();
System.out.println("Client 35、send is:"+line);
//给客户端Socket 发送回应信息
out=new PrintWriter(socket.getOutputStream(),true);
out.println("Server:Your Message Received!");
//关闭资源
out.close();
in.close();
socket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
public static 36、void main(String args[]){
new Server();
}
}
客户端程序:
package a;
import java.io.*;
import .*;
public class Client {
Socket socket;
BufferedReader in;
PrintWriter out;
public Client(){
try{
//连接服务器端的Socket
socket=new Socket("127.0.0.1",10000) 37、
//读取输入字符,输出到服务器端Socket中
System.out.println("Please enter some Character");
BufferedReader line=new BufferedReader(new InputStreamReader(System.in));
out=new PrintWriter(socket.getOutputStream(),true);
//读取从服务器端socket输入的信息
in=new BufferedReader( 38、new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
//关闭资源
out.close();
in.close();
socket.close();
}catch(IOException e){
e.printStackTrace();
}
}
public static void ma 39、in(String args[]){
new Client();
}
}
运行时,错误时这样的:
.BindException: Address already in use: JVM_Bind
at .DualStackPlainSocketImpl.bind0(Native Method)
at .DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:96)
at .AbstractPlainSocketImpl.bind(Abstrac 40、tPlainSocketImpl.java:376)
at .PlainSocketImpl.bind(PlainSocketImpl.java:175)
at .ServerSocket.bind(ServerSocket.java:376)
at .ServerSocket. 41、 解决的办法是下面这样的:
满意回答
Reason:
Address already in use:JVM_Bind
原因:
JVM已经被占用了。
你是不是有其他的Java项目(程序)在运行中,结束了他们就好了。
在运行你想要调试的项目前,要确保JVM是处于Stop状态的。
LZ你写的是不是web项目啊,如果不是上面的原因的话,那就是端口冲突了,LZ的是不是这个异常:
.BindException: Address already in use: JVM_Bind
这个错误的原因是当前程序里用到的端口已经被其他程序占用,例如,我们在eclipse里新建一个 42、socket和serversocket进行通信,在这里面会用到端口号,当运行时,报这个这个错误,那么就是socket里的端口号与外面的程序如Oracle、tomcat 的端口号相同,办法就改掉socket里的端口,或者改tomcat 里的web.xml中的端口号就ok了。
但是没有解决这个错误,把端口3000改成8000后,运行后的结果为:
Please enter some Character
rtrttrtrtrtrt
null
19.错误调试:class cannot be resolved to a t 43、ype 或者JSP import class cannot be resolved to a type
错误调试解析:class cannot be resolved to a type 或者JSP import class cannot be resolved to a type
import XXX.XXX cannot be resolved to a type , import XXX.XXX cannot be resolved错误处理解析
类的引用不可定义为一种。
出现这种问题的情况一般是你的引用出现了二义性。
比如你引用了classes.pack.num1,但是你同时在 44、根文件夹下有一个classes的文件夹,和把此classes文件打包成的jar包,又或者你的classpath环境变量配置的过程中同时出现了路径"."和“XXX.jar”而有两个同名同路径的.class文件可以被找到,就会引发此问题。
很多时候用vi编辑.java文件的时候,默认使用的编译存放路径是".",就是说同目录下。
eclipse工程中默认.java文件的位置是src,编译文件.class的位置是classes,这种情况下, 使用手动测试的时候会出现在src的文件夹下也会生成出.class文件,如果系统环境变量中有classpath="."的定义时,再次使用eclipse编译时,就 45、会出现class cannot be resolved to a type,因为同时可以找到两个同名同路径的.class文件。JSP impot class cannot be resolved to a type我的问题出在eclipse编译时把.class文件放在了classes文件夹下,但是tomcat去找的时候,只找了"."文件夹,结果就找不到。而在编写的时候,eclipse是能找到的,所以编写时不报错,运行时报错。如果你在.文件夹下也生成.class文件,tomcat能找到了,eclipse又找重了,还是不行。我的解决办法是,在tomcat启动时,为tomcat添加引用路径,先把cl 46、asses文件夹导入到JVM中。tomcat在调用类的时候,就不会找不到了。具体操作方法是,使用eclipse的tomcat插件,在eclipse的主界面菜单window下的preferences对话框中找到tomcat插件的那一项,选择JVMsetting,有一个classpath(before generated classpath)中,导入你的classes文件夹。就可解决此问题。
相同的,如果tomcat运行时出现了找不到引用的jar包,也可以在这里设置导入。
后来发现经过myEclipse编译过的带有tomcat属性的文件会自动生成.class文件到目标工程,$tomcat\we 47、bapps\$project\web-inf\classes文件夹下。如果你的tomcat的配置文件路径设置正确的话,MyEclipse在调试,或者tomcat单独启动的时候,读取的就是该文件夹下的.class文件。如果你的tomcat的配置文件使用的是工程的绝对路径,并指向你的MyE的工作目录workspase的时候,就要注意在调试和发布的时候,一定别忘了把你编译好的.class文件考入相应的包下。否则tomcat会报此错或者class not found的错误。
如果还不对,请检查系统环境变量class_path是不是重复设置了可以导致二义性的路径。
或者是原有的同包,同名的类的拷贝版 48、被加入了路径。
WEB-INF\classes
class cannot be resolved to a type 问题的解决(2011-12-01 13:42:36)转载▼标签: it 分类: Java
错误:class cannot be resolved to a type 或者JSP import class cannot be resolved to a type
import XXX.XXX cannot be resolved to a type , import XXX.XXX cannot be resolved
错误原因:引用出现了二义性。也就是说在你的工程中存在两个用于存放.class文件的classes文件夹,而加载tomcat的时候,tomcat的路径是不确定的,也可能找到了根本没有存放这个类的classes文件夹
解决方法:网上查到的解决办法是在tomcat启动时,为tomcat添加引用路径,先把classes文件夹导入到JVM中。tomcat在调用类的时候,就不会找不到了。具体操作方法是,使用eclipse的tomcat插件,在eclipse的主界面菜单window下的preferences对话框中找到tomcat插件的那一项,选择JV






