Java中常见错误和异常解决方法打印要点文档格式.docx
- 文档编号:16718396
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:33
- 大小:212.09KB
Java中常见错误和异常解决方法打印要点文档格式.docx
《Java中常见错误和异常解决方法打印要点文档格式.docx》由会员分享,可在线阅读,更多相关《Java中常见错误和异常解决方法打印要点文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
publicstaticvoidmain(String[]args){
ResourceBundleresource=ResourceBundle.getBundle("
test"
);
System.out.print(resource.getString("
msg0"
)+"
!
"
System.out.println(resource.getString("
msg1"
}
}
test.properties
msg0="
HelloWorld"
msg1="
dajiahao"
开始自己测试的时候:
将属性文件放在bin/下也试过也不行无赖中就在google中搜索了一下终于在sun的java论坛
(
I'
vesolvedtheproblemthebestwaypossible.Basicallywhati'
vedoneisaddedanewclassfoldernamedconfigtotheprojecthomedir.Theniaddedthisclassfoldertotheclasspathinprojectproperties.Afterdoingallofthisyouonlyneedtoreferencethepropertiesfileby"
Email"
.
Hopethishelpsanyoneelsewhoishavingsimiliarproblems.
基本意思就是在src下建立classes(名字无所谓)文件夹将属性文件存放在下面,然后将这个文件夹加入类路径中!
运行就可以了:
加入类路径的方法:
你的工程文件夹->
properties->
选择Libraries选项卡->
AddClassFolder将刚才建立的文件夹加入就可以了!
结果如下:
;
2.中文显示
在classes目录下建立message_CH.properties内容如下:
ms0="
大家好"
同样用上面的测试文件!
?
ó
乱码怎么回事啊!
在XX里搜索后找到了答案有以为网友写的很清楚:
下面引用如下:
原理
Property文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。
而在Java程序中读取Property文件的时候使用的是Unicode编码方式,这种编码方式不同会导致中文乱码。
因此需要将Property文件中的中文字符转化成Unicode编码方式才能正常显示中文。
解决办法:
Java提供了专门的工具对Property文件进行Unicode转化,这种工具就是native2ascii,它在JDK安装环境的bin目录下。
native2ascii工具将带有本机编码字符(非拉丁1和非单一码字符)的文件转换成带有Unicode编码字符的文件。
假设需要转化的属性文件为:
D:
/src/resources.properties(含有中文字符)
转化后的属性文件为:
/classes/resources.properties(中文字符统一转化为Unicode)
那么使用如下命令
JAVA_HOME/bin/native2ascii-encodingGBKD:
/src/resources.propertiesD:
/classes/resources.properties
就能将含有中文字符的属性文件转化成单一Unicode编码方式的属性文件。
中文乱码自然会被解决。
通过上面的方法我将生成的文件打开一看内容如下:
ch="
/u5927/u5bb6/u597d"
再运行结果如下:
(2)另一种解决办法:
Can'
Struts2国际化异常处理
这是找不到指定文件;
你必须把.properties文件,放在与这个调用文件.java相同的目录里;
Hello.java在workspace\test\src\com\lj\guojiehua下
hello_en_US.properties必须在workspace\test\src下
hello_zh_CN.properties必须在workspace\test\src下
其实原因是我虽然在buildpath里面加了\pruway\source\source\config,但是系统编译的时候,在classes里面应该会自动产生resource_en_US.properties,可是实际情况是classes包下面没有产生,故我删掉重加,再编译结果发现通过了。
。
就是说,只要你buildpath路径对了,该路径下也有resoucebudle需要的类,那么系统会自动在classes里面自动编译产生这些类的。
所以,先检查classes里,有没有生成对应的resource_en_US.properties,如果没有,那么检查buildpath路径下有没有对应的properties类,如果有,那么证明系统编译没有编译完整,删掉path,重新addfoler,加入,再编译,检查classes下有无。
如果都有,那么证明成功。
10.java.lang.IllegalThreadStateException
解决办法:
不能启动两次线程
11.java.lang.NoSuchMethodError
答:
必须有一个publicstaticvoidmain(String[]args){//这里是入口}作为入口点,启动java虚拟机时虚拟机会找这个方法,如果没有就报exceptioninthread“main”java.lang.nosuchmethoderror
.UnknownHostException:
原始出错程序是这样的:
解答方式:
import.InetAddress;
publicclassa{
publicstaticvoidmain(Stringargs[])throwsException{//所有异常抛出
InetAddresslocAdd=null;
InetAddressremAdd=null;
locAdd=InetAddress.getLocalHost();
//得到本机
remAdd=InetAddress.getByName("
;
System.out.println("
本机的IP地址:
+locAdd.getHostAddress());
MLDNJAVA的IP地址:
+remAdd.getHostAddress());
本机是否可达:
+locAdd.isReachable(5000));
//5000代表代数
};
运行后结果为:
如果注释掉remAdd=InetAddress.getByName("
运行结果又是这样的:
上述程序的解决办法是:
将
remAdd=InetAddress.getByName("
改成
程序运行结果如下:
完成实验要求,但是这里就有一个问题了,为什么去掉http//和后面的/的就运行的了呢?
(2)但是对于这个极其相似的程序却可以运行出结果:
import.InetAddress;
publicclassb{
publicstaticvoidmain(Stringargs[])throwsException{
InetAddressaddress=InetAddress.getByName("
System.out.println("
ip:
"
+address.getHostAddress());
host:
+address.getHostName());
canonicalhostname:
+address.getCanonicalHostName());
byte[]bytes=address.getAddress();
for(byteb:
bytes)
{
if(b>
=0)System.out.print(b);
elseSystem.out.print(256+b);
运行结果为:
13.运行下列程序出现了这样的错误,这是线程的知识,一个线程如果启动了,再启动一个的时候就会报错:
java.lang.IllegalThreadStateException
程序如下:
classthrundextendsThread{
privateStringname;
publicthrund(Stringname){
this.name=name;
publicvoidrun(){//线程完成的动作
for(intj=0;
j<
4;
j++){
System.out.println(name+"
第"
+j+"
个"
}
publicclassa{
publicstaticvoidmain(Stringagrs[]){
thrundth1=newthrund("
线程A"
//实例化一个线程对象
th1.start();
//调用线程主体
运行结果如下:
14.Thepublictypeabcmustbedefinedinitsownfile这样的警告是出现在我下面这样的程序中的:
所以我在XX上输入这样的问题:
java程序中两个类为什么不能同时有public(其中有一个是主方法)?
得到的回答是这样的:
因为一个GM规定一个类中只能有一个PUBLIC的而且源文件的名字只能和PUBLKIC属性的类去一个名字。
另一种回答是这样的:
同个源文件有多个公共类,编译器就找不到应该执行的main方法了
15.运行下列泛型程序时,出现一下错误:
程序:
classadd<
T>
{
privateTy;
publicTp(Ty){
System.out.println(y);
returny;
publicstaticvoidmain(Stringargs[]){
add<
String>
adder=newadd<
();
//System.out.println("
输出属性"
+adder.getX());
//adder.p("
你好,邱林和"
fun(adder);
publicstaticvoidfun(add<
>
temp){
System.out.println("
内容"
+temp);
出现了如下错误:
其中这个voidisaninvalidtypeforthevariablefun这个错误的解释时:
第一步:
检查拼写是否错误;
第二步:
检查voidactionPerformed(ActionEventae){}函数的位置,不能让它嵌套在别的函数里。
我不知道为什么,但我这样改对了。
通过这个观察上述代码确实发现这个fun方法被包含在了主方法中,所以导致这个错误,改成下列程序后,程序运行结果如下:
publicclassa{
}//一开始这个}被放在了fun函数下面,所以导致了这个错误。
16.错误:
java:
Syntaxerrorontoken"
,expected
17.解释是这样的:
intb=3;
b=b-2;
应为这2行代码写的地方还处在声明定义阶段处。
就好象你脑子里想象着我有3块钱(第一行),但是又立马用这想象的3快去买物品(第二行)所以卖东西的人肯定会说你(报错).就是说,b=b-2这行代码处的位置还处于声明阶段,没有在内存中给他划分空间,你是不能操作的。
要么声明为静态的,提前划分空间
17,运行以下程序时,报错:
程序为:
publicstaticvoidmain(Stringargs[]){
Runtimerun=Runtime.getRuntime();
JVM最大内存量:
+run.maxMemory());
Processpro=null;
//声明一个Process对象,接收启动的进程
try{
pro=run.exec("
Thunder.exe"
//调用本机程序,必须进行异常处理
}catch(Exceptione){//打印异常信息
e.printStackTrace();
Thread.sleep(5000);
}catch(Exceptione){
pro.destroy();
//结束此进程
}
这一句有问题,pro=run.exec("
//调用本机程序,必须进行异常处理,里面的Thunder.exe改成”notepad“就有用,不知道为什么?
18.java.lang.ArrayStoreException
当运行下列程序时出现了这样的错误:
importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.Iterator;
importjava.util.List;
List<
Integer>
al=null;
//定义List对象
Collection<
cl=null;
//定义Collention对象
al=newArrayList<
//实例化List对象,只能是Integer
cl=newArrayList<
//实例化Collection对象,只能是Integer
al.add(0,34);
//在指定位置增加元素
al.add(1,343);
System.out.println(al);
cl.add(5654);
cl.add(3434);
System.out.println(cl);
al.addAll(cl);
//从Collection继承的方法,增加一组对象
Stringstr[]=al.toArray(newString[]{});
//指定的泛型类型
System.out.print("
指定数组类型"
//信息输出
for(inti=0;
i<
str.length;
i++){//输出字符串数组中的内容
System.out.print(str[i]+"
、"
\n返回对象数组:
//信息输出
Objectobj[]=al.toArray();
//直接返回对象数组
obj.length;
i++){//循环输出对象数组内容
Stringtemp=(String)obj[i];
//每一个对象都是String类型实例
System.out.print(temp+"
程序运行结果如下:
当你试图将错误类型的对象存储到一个对象数组时抛出的异常。
例如,以下代码可生成一个ArrayStoreException:
Objectx[]=newString[3];
x[0]=newInteger(0);
就这么简单。
怎么避免呢?
关键就是元素的内容要正确。
你看你的代码:
privateObject[]objects;
....objects=newObjectSet[size];
很明显这里用父类的引用指向了子类的实现。
那么给每个元素赋值的时候只能付这个子类对象及这个子类的后代。
你又将OBJECT赋值给它,那么就必须向下转型。
把:
”List<
//实例化Collection对象,只能是Integer“语句中的Integer都改成String就可以了
18.addressalreadyinuse:
jvm_bind
在运行服务器和客户端程序的时候出现下面的错误:
可能运行错误的原因有:
通常出现Addressalreadyinuse:
JVM_Bind错误的可能性分析
I.就是当前端口已经有别的程序在占用着,所以要么把占用这个端口的程序关闭,要么重新换一个端口
II.端口号被占用,如果你有装oracle的话,有可能是oracle使用了8080端口,oracle安装后并且如果启动了OracleHttp服务会占用8080端口
III.我认为很可能是多启动了几次TOMCAT,在ECLIPSE下重复启动TOMCAT就会出现这个问题,你去调查一下看看是否是这个原因.
IV.如果不是windows操作系统,那么80端口已经被占用.如果是windows操作系统.请检查是否装有IIS.
V.启动了多个Tomcat。
我就是因为启动了两个Tomcat,所以才会报这样的错误,通常情况下,多次启动Tomcat或者非正常关闭Myeclipse,但是占用端口的进程没有关闭,也会出现这样的错误。
解决方法是关闭javaw.exe进程。
源程序是:
服务器端程序:
packagea;
import.*;
importjava.io.*;
publicclassServer{
privateServerSocketss;
privateSocketsocket;
privateBufferedReaderin;
privatePrintWriterout;
publicServer(){
//在服务器端指定端口10000创建队列长度为50的服务器端套接字
ss=newServerSocket(10000);
while(true){
//告诉服务器不停地等待,直到有客户端连接到该Serversocket指定的端口
//一旦有客户端通过网络向该端口发送正确的连接请求
//该方法就会返回表示服务器与客户端连接已建立的Socket对象
socket=ss.accept();
StringclientIP=socket.getInetAddress().getHostAddress();
StringclientPort="
:
+socket.getLocalPort();
System.out.println("
Aclientcomein!
IP:
+clientIP+clientPort);
//获得客户端发送的信息
in=newBufferedReader(new
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 常见 错误 异常 解决方法 打印 要点