《2022年java的常见问题及解决方法 .pdf》由会员分享,可在线阅读,更多相关《2022年java的常见问题及解决方法 .pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、mons.collections.SequencedHashMaps signer information does not match signer information of other classes in the same package这是由于 struts 提供的 commons-beanutils.jar和 hibernate 提供的 commons-collections.jar冲突成的,可以从 spring 提供的 lib 中找到这个两个jar 2.java.lang.IllegalStateException:No data type for node:org.hiber
2、nate.hql.ast.tree.IdentNode用 hql 时,忘了给表名加别名,如 select p from Position,应该是 select p from Position p 3.The Server didn t send back a proper XML response 用 FCKEditor 时原因:解析不了xml 文件解决方法:情况一:web.xml 的配置是否正确,具体查看FCKEditor 使用指南.pdf,还有 fckeditor 自带的几个jar包情况二:加入serializer.jar,xalan.jar 情况三:把项目下的fckeditor 包删了,
3、重新加入一遍4.org.eclipse.swt.SWTError:No more handles Unknown Mozilla path(MOZILLA_FIVE_HOME not set)SWTError:没有更多的处理 未知 Mozilla 的路径(MOZILLA_FIVE_HOME未设置)环境:linux 下运行 swt 程序(我出现此问题是,在 linux 下嵌套浏览器)原因:firefox 版本不一致解决:重装一个firefox,并设置相关变量5.Exception in thread main org.eclipse.swt.SWTError:No more handles Co
4、uld not detect registered XULRunner to use环境:用 XULRunner 在 java application中嵌套浏览器原因:没有注册XULRunner 解决:window下环境中,在程序中加入,如(第二个参数是下载解压后的存放路径):static System.setProperty(org.eclipse.swt.browser.XULRunnerPath,C:xulrunner);6.Exception in thread main java.lang.UnsatisfiedLinkError:no swt-win32-3536 or swt-w
5、in32 in swt.library.path,java.library.path or the jar file名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 19 页 -环境:用 DJ Natvie Swing时,在 java application中嵌套浏览器,且在windows 环境下运行正常,但在 linux 下却包此异常原因:windows下与 linux 下使用的 swt jar 包不一样解决:在 windows 下用 swt-3.5M6-win32-win32-x86.jar,在 linux 下用 swt-3.5.1-gtk-linux-x86.jar 7.Ex
6、ception in thread main .ProtocolException:cannot write to a URLConnection if doOutput=false-call setDoOutput(true)环境:用 URLConnection送某 url 发送数据时原因:doOutput=false时,不能发送数据解决:如 urlConnection.setDoOutput(true).SocketException:Connection resetat .SocketInputStream.read(SocketInputStream.java:168)at sun.n
7、io.cs.StreamDecoder.readBytes(StreamDecoder.java:264)at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)at java.io.InputStreamReader.read(InputStreamReader.java:167)at java.io.BufferedReader.fill(BufferedReader.java:136)at java.io.Buff
8、eredReader.readLine(BufferedReader.java:299)at java.io.BufferedReader.readLine(BufferedReader.java:362)at com.eagle.service.AutoUpdate.run(AutoUpdate.java:43)环境:j2se socket编程时,服务器端报错原因 1:服务器端用BufferedReader,时,没有读到一行解决:客户端用PrintWriter,pw.println(),不能用 pw.print(),因为 br.readLine()是读一行环境:j2se socket编程时,
9、服务器端/客户端在 br.readLine()时报错原因 2:服务器端用BufferedReader,br.readLine()时,客户端/服务器已经退出,但是并未通过服务器/客户端,即服务器端/客户端的socket 还没有关闭,当用 br.readLine()时就会出现这种情况解决:在关闭客户端时要socket.close(),同时还要向服务器发送一条退出的信息,这样让服务器知道某个客户端已经关闭,它就可以终止对此客户端的线程了,反之服务器也是一样9.org.hibernate.PropertyAccessException:Null value was assigned to a prop
10、erty of primitive type setter of XXX.User环境:hibernate 原因:oolean 类型的值为null,boolean类型的值必须是true/false 解决:save or update时给 boolean 类型的值赋true/false 10.用占位符查询时出现空指针java.lang.NullPointerExceptionat org.hibernate.hql.ast.ParameterTranslationsImpl.getNamedParameterExpectedType(ParameterTranslationsImpl.java:
11、63)at org.hibernate.engine.query.HQLQueryPlan.buildParameterMetadata(HQLQueryPlan.java:245)at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:95)at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:54)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 19 页 -at org.hibernate.engine.query.QueryPlanCac
12、he.getHQLQueryPlan(QueryPlanCache.java:71)at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)at .struts.action.Lo
13、ginAction.execute(LoginAction.java:72)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)at org.apache.str
14、uts.action.ActionServlet.doPost(ActionServlet.java:432)at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)at org.apache.catal
15、ina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)at org.apache.catalina.core.StandardHostValve.invoke(St
16、andardHostValve.java:126)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)at org.apache.coyote.http11.Http1
17、1Processor.process(Http11Processor.java:869)at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)at .PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)at .LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)at org.a
18、pache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)at java.lang.Thread.run(Thread.java:595)环境:hibernate 原因:HQL 不能解析解决:错误写法:String hql=select m from com.eagle.oa.model.Message m where m.ids like:id;正确写法:String hql=select m from com.eagle.oa.model.Message m where m.ids like:i
19、d;11.java.lang.IndexOutOfBoundsException:Remember that ordinal parameters are 1-based!原因:在使用 hibernate的 session.createQuery(.)时设置参数的下标应该从0 开始解决:如:return session.createQuery(from User u where u.userName=?and password=?).setParameter(0,name).setParameter(1,password).uniqueResult();12.org.hibernate.Tra
20、nsientObjectException:object references an unsaved transient instance-save the transient instance before flushing:com.wxj.entities.Group名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 19 页 -环境:hibernate 原因:某个实例的属性一个对象,这个对象没有保存,还是暂态的对象解决:先保存这个对象,或是在另一端加inverse=true 13.ORA-01461:can bind a LONG value only for insert i
21、nto a LONG column环境:oracle 原因:jar 冲突解决:换成classes12.jar包即可14.ERROR LazyInitializationException:19-could not initialize proxy-the owning Session was closed环境:SSH 原因:当一个类或属性设置了lazy=true,操作对象时,session 已经关闭了解决:使用 Spring 的过滤器 openSessionInView 15.org.springframework.dao.InvalidDataAccessApiUsageException:
22、Write operations are not allowed in read-only mode(FlushMode.NEVER/MANUAL):Turn your Session into FlushMode.COMMIT/AUTO or remove readOnly marker from transaction definition.环境:SSH 原因:这个异常产生的主要原因是DAO 采用了 Spring 容器的事务管理策略,如果操作方法的名称和事务策略中指定的被管理的名称不能够匹配上,spring 就会采取默认的事务管理策略(PROPAGATION_REQUIRED,read o
23、nly).如果是插入和修改操作,就不被允许的,所以包这个异常解决:修改 spring 配置文件中相关事务管理部分mon.beans.ProbeException:There is no READABLE property named eid in class com.wxj.entity.Student 环境:ibatis 原因:在给对象做操作,设置参数时,指定的参数不是对象中有的属性,就会抛出此异常解决:核对对象的属性17.java.lang.OutOfMemoryError:PermGen space环境:很多,如ssh 整合时原因:不断的更新class,造成应用重启,最终造成代码区的内存
24、空间满了解决:方法很多,1 重启,2 增加代码区的大小,3 少更新 class,4 有时可能是 log4j 造成的问题,建议使用common-loggin.jar 5,优化代码以下来自 CSDN 的 jinhuiyu:在 JVM 中如果 98%的时间是用于GC 且可用的Heap size 不足 2%的时候将抛出此异常信息,可以用如下方法解决(根据你的实际情况设置大小),但是这只是临时的解决方法,更重要的是改造你的CODE 1.可以在 windows 更改系统环境变量加上JAVA_OPTS=-Xms64m-Xmx512m 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 19 页 -
25、2,如果用的 tomcat,在 windows 下,可以在 C:tomcat5.5.9bincatalina.bat 中加上:set JAVA_OPTS=-Xms64m-Xmx256m 位置在:rem Guess CATALINA_HOME if not defined 这行的下面加合适.3.如果是 linux 系统Linux 在tomcat_home/bin/catalina.sh的前面,加set JAVA_OPTS=-Xms64-Xmx51218.在客户端使用dwr 时,即跨域访问时,出现“拒绝访问“及“找不到某个属性”的问题(在服务器端调用时却正常)环境:在客户端使用dwr 原因:1。可
26、能是 jar 包2。在 web.xml 中的配置问题解决:1。换 dwr2.0.rc1 2。在 web.xml 中加入:DWR Servlet dwr-invoker org.directwebremoting.servlet.DwrServlet debug true allowGetForSafariButMakeForgeryEasier true !-crossDomainSessionSecurity false -dwr-invoker/dwr/*19.Fault-;nested exception is:java.lang.RuntimeException:No compiler
27、 found in your classpath!(you may need to add tools.jar)环境:axis 原因:环境变量CLASSPATH没有设置好解决:方法一重设 CLASSPATH方法二1。将 C:Program Filesjavajdk1.5.0_06lib 下的 tools.jar 拷贝到 Tomcat 的 lib 下名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 19 页 -2。将 axislib 下的所有 jar 包都添加到classpath 中,否则编译自己的应用程序时会报找不到包的错误!20.java.lang.UnsupportedClas
28、sVersionError:Bad version number in.class file环境:原因:Tomcat运行的 JDK 版本与 application运行的 JDK 版本不一致解决:1.Window-Preferences-Java-compiler中的 compiler compliance level对应的下拉菜单中选择JDK 版本.2.Window-Preferences-MyEclipse-Servers-Tomcat-Tomcat n.x-JDK中的 Tomcat JDK name下的下拉菜单中选择自己电脑上安装的JDK 版本(必须与步骤1 中的 JDK 版本一致).如果
29、还是没有解决,因为有些MyEclipse版本自带有JDK 版本,所以也要将它改过来.3.Window-Preferences-Java-Installed JRES,然后在右边选择与步骤1 和 2 版本一致的JDK 版本,如果没有,可以自己添加.然后选中就可以了.21.faultCode:http:/schemas.xmlsoap.org/soap/envelope/Server.generalException faultDetail:http:/xml.apache.org/axis/stackTrace:No client transport named null found!环境:ax
30、is 原因:没有设置服务的地址解决:call.setTargetEndpointAddress(new URL(http:/.);22.javascript window.onload 在 IE 中出现 尚未实现 解决:使用匿名函数,如window.onload=function().;23.java.lang.IllegalArgumentException:argument type mismatch环境:struts1.2上传文件原因:第一种情况:中没有加入method=post enctype=multipart/form-data 第二咱情况:数据类型不一样解决:第一种情况:在 中加
31、入method=post enctype=multipart/form-data 第二种情况:重新数据类型,如:实体类(news)中:private byte updloadFile;hbm.xml映射:ActionForm:private FormFile uploadFile 页面表单:Action:user.setUploadFile(userActionForm.getUploadFile().getFileData();名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 19 页 -24.Dont know how to iterate over supplied item
32、s in<forEach>如:其中 types 不是一个可迭代的对象25.org.springframework.beans.factory.BeanDefinitionStoreException:Line 5 in XML document from ServletContext resource/WEB-INF/applicationContext.xml is invalid;nested exception is org.xml.sax.SAXParseException:Document root element beans,must match DOCTYPE roo
33、t null.环境:spring 原因:spring 版本与其配置文件中的schema不一致解决:换 jar 包或 schema,如:换成:26.The archive:C:/Program Files/MyEclipse6.5/eclipse/configuration/org.eclipse.osgi/bundles/290/1/.cp/lib/wsdl4j-1.5.1.jar which is referenced by the classpath,does not exist.名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 19 页 -环境:在myeclipse中 run
34、 application或 run junit时,突然弹出一个对话框,内容如题。而且项目上会有一个小红X 原因:myeclipse引用的某 jar 包不在 classpath中解决:按照提示的路径将jar 包加进去,如果某文件夹不存在就新建一个,以.开头的文件夹不能直接新建,而应该使用cmd 来创建,加进去之后,刷新项目,项目的小红X 消除之后即可运行了.ConnectException:Connection timed out:connect环境:根据wsdl 通过 myeclipse来创建 axis webservice客户端原因:请求的地址错误解决:在XXLocator.java文件中,
35、找到XXHttpPort_address属性,更改它的请求地址就行了如:private java.lang.String xfireserviceHttpPort_address=http:/localhost:9999/xfireserver/services/xfireservice;28:org.codehaus.xfire.fault.XFireFault:There must be a method name element.at org.codehaus.xfire.service.binding.WrappedBinding.readMessage(WrappedBinding.
36、java:32)at org.codehaus.xfire.soap.handler.SoapBodyHandler.invoke(SoapBodyHandler.java:42)at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)at org.codehaus.xfire.client.Client.onReceive(Client.java:406)at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpCha
37、nnel.java:139)at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)at org.codehaus.xfire.client.Invocation.invoke(Invocati
38、on.java:79)at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)at org.codehaus.xfire.client.Client.invoke(Client.java:336)at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)at$Proxy8.refund(Unknown
39、 Source)Q2.6 我在 java xxx的时候显示“Exception in thread main java.lang.NoSuchMetho dError:main”。答:首先,在你的程序中每个java 文件有且只能有一个public类,这个类的类名必须和文件名的大小写完全一样。其次,在你要运行的类中有且只能有一个public static void main(String args)方法,这个方法就是你的主程序。Q2.7 在 java xxx的时候显示“Exception in thread main 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 19 页 -ja
40、va.lang.NullPointerEx ception”。答:在程序中你试图在值为null的对象变量上调用方法,请检查你的程序确保你的对象被恰当的初始化。参见 Q4.8 以了解 java 中的异常机制。Q2.8 package 是什么意思?怎么用?答:为了唯一标识每个类并分组,java 使用了 package 的概念。每个类都有一个全名,例如 String的全名是 java.lang.String,其中 java.lang是包名,S tring是短名。按照 java 命名惯例,包名是全部小写的,而类名的第一个字母是大写的。这样,如果你自行定义了同样名字的类String,你可以把它放在 my
41、package中,通过使用全名 mypackage.String和 java.lang.String来区分这两个类。同时,将逻辑上相关的类放在同一个包中,可以使程序结构更为清楚。为了定义包,你要做的就是在java 文件开头加一行“package mypackage;”。注意包没有嵌套或包含关系,mypackage包和 mypackage.mysubpackage包对 JRE来说是并列的两个包(虽然开发者可能暗示包含关系)。Q2.9 我没有声明任何 package 会怎么样?答:你的类被认为放在默认包中。这时全名和短名是一致的。Q2.10 在一个类中怎么使用其他类?答:如果你使用 java.la
42、ng包或者默认包中的类,不用做任何事。如果你的类位于 mypackage包中,并且要调用同一包中的其他类,也不用做任何事。如果你使用其他包中的类,在package 声明之后,类声明之前使用import otherpackage1.Class 1;或 import otherpackage2.*;这里.*表示引入这个包中的所有类。然后在程序中你可以使用其他类的短名。如果短名间有重名冲突,必须使用全名来区分。注意在使用其他包中的类时,你只能使用public的类和接口,参见Q5.4。Q2.11 我用了 package 的时候显示 NoClassDefFoundError,但是我把所有package
43、去掉的时候能正常运行。答:将你的 java 文件按包名组织存放。比如你的工作目录是/work,你的类是 package1.Class1,那么将它存放名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 19 页 -为/work/package1/Class1.java。如果没有声明包,那么直接放在/work 下。在/work 下执行 javac package1/class1.java,再执行 java package1.class1,你会发现一切正常。另外,如果你的类的个数已经多到了你需要使用包来组织的话,你可以考虑开始使用IDE。Q2.12 我想把 java 编译成 exe 文件,
44、该怎么做?答:JDK只能将 java 源文件编译为 class 文件。class 文件是一种跨平台的字节码,必须依赖平台相关的JRE来运行。Java 以此来实现跨平台性。有些开发工具可以将java 文件编译为 exe 文件。作者反对这种做法,因为这样就取消了跨平台性。如果你确信你的软件只在Windows平台上运行,你可以考虑使用 C+/C#来编程。Q2.13 我在编译的时候遇到什么deprecated API,是什么意思?答:所谓 deprecated 是指已经过时,但是为了向前兼容起见仍然保留的方法。这些方法可能会在以后取消支持。你应当改用较新的方法。在 API 里面会说明你应当用什么方法来
45、代替之。三、I/O 篇Q3.1 我怎么给 java 程序加启动参数,就像dir/p/w那样?答:还记得 public static void main(String args)吗?这里的 args 就是你的启动参数。在运行时你输入 java package1.class1 arg1 arg2,args 中就会有两个 String,第一个是arg1,第二个是 arg2。Q3.2 我怎么从键盘输入一个int/double/字符串?答:java 的 I/O 操作比 C+要复杂一点。如果要从键盘输入,样例代码如下:BufferedReader cin=new BufferedReader(new In
46、putStreamReader(System.in);名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 19 页 -String s=cin.readLine();这样你就获得了一个字符串,如果你需要数字的话再使用:int n=Integer.parseInt(s);或者 double d=Double.parseDouble(s);来将字符串 534 转换成 int或 double。Q3.3 我怎么输出一个 int/double/字符串?答:使用 System.out.println(n)或者 System.out.println(Hello)等等。Q3.4 我发现有些书上直接
47、用System.in 输入,比你要简单得多。答:java 使用 unicode,是双字节。而System.in 是单字节的 stream。如果你要输入双字节文字比如中文,请使用作者的做法。Q3.5 我怎么从文件输入/输出一个 int/double/字符串?答:类似于从键盘输入,只不过换成BufferedReader fin=new BufferedReader(new FileReader(myFileName );PrintWriter fout=new PrintWriter(new FileWriter(myFileName );另外如果你还没下载API,请开始下载并阅读java.io包
48、中的内容。Q3.6 我想读写文件的指定位置,该怎么办?答:java.io.RandomAccessFile可以满足你的需要。Q3.7 怎么判断要读的文件已经到了尽头?答:在 Reader 的 read 方法中明确说明返回-1 表示流的结尾。四、关键字篇Q4.1 java里面怎么定义宏?答:java 不支持宏,因为宏代换不能保证类型安全。如果你需要定义常量,可以将它定义为某个类的static final成员。参见 Q4.2和 Q4.6。Q4.2 java里面没法用 const。答:你可以用 final关键字。例如 final int m=9。被声明为 final的变量不能被再次赋值。唯一的例外是
49、所谓blank final,如下例所示:public class MyClass1 private final int a=3;private final int b;/blank final public MyClass1()名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 19 页 -a=5;/不合法,final变量不能被再次赋值。b=4;/合法,这是 b 第一次被赋值。b=6;/不合法,b 不能被再次赋值。final也可以用于声明方法或类,被声明为final的方法或类不能被继承。注意 const 是 java 的保留字以备扩充。Q4.3 java里面也不能用 goto。答:
50、甚至在面向过程的语言中你也可以完全不用goto。请检查你的程序流程是否合理。如果你需要从多层循环中迅速跳出,java 增强了(和 C+相比)break 和 continue的功能,支持 label。例如:outer:while(.)inner:for(.).break inner;.continue outer;.和 const 一样,goto 也是 java 的保留字以备扩充。Q4.4 java里面能不能重载操作符?答:不能。String的+号是唯一一个内置的重载操作符。你可以通过定义接口和方法来实现类似功能。Q4.5 我 new了一个对象,但是没法delete 掉它。答:java 有自动内