invalid end header( bad central directory size)

异常描述

java.util.zip.ZipException: invalid END header (bad central directory size)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:219)
at java.util.zip.ZipFile.<init>(ZipFile.java:149)
at java.util.jar.JarFile.<init>(JarFile.java:166)
at java.util.jar.JarFile.<init>(JarFile.java:103)
at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:93)

部署war包到tomcat之后,程序无法启动,说是解压错误

问题原因及第一种解决方法

war包文件格式其实就是zip,是需要解压的。而此异常就是解压过程中出现错误。

首先要保证war包完好,跟上传的时候比较一下大小。使用ftp上传有两种格式:文本格式和二进制格式,需要注意一定要选择二进制格式。

如果保证war包完好,可以直接使用unzip haha.war命令进行解压。

tomcat报这个错误说明tomcat无法解压这个文件,但是unzip命令还是可以解压的。解压之后并不报错,web程序正常运行。

另一种解决方法

stackoverflow上说:查找是哪个jar包引起的异常,去本地maven仓库中找到该包对应的文件夹,删除之,重新下载之,重新打包就可以了。

UnsupportedClassVersionError

异常描述

java.lang.UnsupportedClassVersionError: org/apache/solr/client/solrj/SolrServerException : Unsupported major.minor version 51.0

主要原因是jdk的版本太低了,solr4.8以后需要编译在1.7的版本。

在Maven中设置的Java版本只能限制自己的源代码不能使用新版特性,并不能限制jar包。java8生成的jar包有可能无法再java6虚拟机上运行,因为虚拟机也在不停地变化。

ThreadLocal不会自动清空

Servlet容器对于每个请求开辟一个线程处理

Servlet容器维护一个线程池

ThreadLocal不会自动清空它所维护的对象

所以ThreadLocal中的对象有时需要手动清空。

启动tomcat 报错 Unsupported major.minor version 52.0

出现这个错误是因为编译的JDK版本,跟运行时所用的JDK版本不一致所导致的:低版本的jvm无法加载高版本的class文件造成的。

发现这个错误费了好大劲。Tomcat的日志文件重要的有三种:

  • catalina.out
  • catalina.log
  • localhost.log

出现问题之后三个日志对比着看比较好。

No such method error

java.lang.NoSuchMethodError: org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.validateSettings(II)V

出现此问题的原因多半是因为jar包重复。

以war包形式在tomcat上部署项目时,tomcat会自动解压war包。解压之后会把文件复制到与war包同名的文件夹中,如果该文件夹已经存在,则会合并。会导致意想不到的错误,所以在tomcat上部署项目时一定要先把旧的删掉,再部署新的。

Abstract Method Error

抽象方法错误,意思是调用了抽象方法。

这个错误的原因是:通过string加载某个类,这个类没有找到。

一个项目依赖两个jar包,如果这两个jar包都包含名为haha的包,当加载haha.MyClass时就难以判断去哪一个包下面去找,从而产生找不到类的错误。

intellj idea maven 无效的目标发行版: 1.8

出现此问题,多半是版本问题。

可能的原因如下:

使用maven compile进行编译时报出此错误,这是因为本地JDK是1.7的,不可能编译成目标平台为1.8的代码。maven所调用的javac版本就是PATH环境变量里面的javac。

如果使用IntelliJ,那么可以使用界面maven小窗口编译成功,因为界面方式默认调用的jdk是跟项目相同的。

另一种可能原因是插件版本太低,因为编译的时候需要设置一些参数,所以需要maven编译插件,该插件如果版本太低而编译目标太高,就会报此异常。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>

Java 字符转换大坑

String s = "天下大势";
System.out.println(new String(new String(s.getBytes("utf8"), "gbk").getBytes("gbk"), "utf8"));
System.out.println(new String(new String(s.getBytes("utf8"), "ascii").getBytes("ascii"), "utf8"));

对于utf8编码的字符串s,如果用ascii进行解码,那么得到的错误无法恢复;

对于utf8编码的字符串s,如果用gbk进行解码,那么虽然得到乱码,但是还是能够转换回去的。

如果ascii码根本无法解码字符串s,那么得到的字符串s就是不准确的,即便是转换回去依旧不准确。

如果是gbk编码,虽然无法解码字符串s,但是它依旧可以转换回去。而ASCII则一错不复返了。

Java Exceptions的更多相关文章

  1. Some Java exceptions, messages and errors.

    http://www.antapex.org/messages_java.txt http://www.jvmmonitor.org/index.html

  2. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十二)之Error Handling with Exceptions

    The ideal time to catch an error is at compile time, before you even try to run the program. However ...

  3. Thinking in Java——笔记(12)

    Error Handling with Exceptions The ideal time to catch an error is at compile time, before you even ...

  4. java异常处理的设计

    有一句这样话:一个衡量Java设计师水平和开发团队纪律性的好方法就是读读他们应用程序里的异常处理代码. 本文主要讨论开发Java程序时,如何设计异常处理的代码,如何时抛异常,捕获到了怎么处理,而不是讲 ...

  5. 面试准备(三) Java 异常类层次结构

    在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中.这类容易出选择题 考试你是否掌握了异常类并清楚哪些异常类必须捕获 下面的图展示了Java异常类的继承关系. 图1 粉红色的 ...

  6. JAVA fundamentals of exception handling mechanism

    Agenda Three Categories Of Exceptions Exceptions Hierarchy try-catch-finally block The try-with-reso ...

  7. thinking in java Generics Latent typing

    The beginning of this chapter introduced the idea of writing code that can be applied as generally a ...

  8. Top 10 Questions about Java Exceptions--reference

    reference from:http://www.programcreek.com/2013/10/top-10-questions-about-java-exceptions/ This arti ...

  9. java url demo

    // File Name : URLDemo.java import java.net.*; import java.io.*; public class URLDemo { public stati ...

随机推荐

  1. gradlew 命令行 build 调试 构建错误 Manifest merger failed MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. Redis学习手册(主从复制)(转)

    一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理论性的 ...

  3. android动手写控件系列——老猪叫你写相机

    前记:Android这个开源而自由的系统,为我们带来开发便利,同时也埋下太多的深坑.例如调用系统自带的相机就会出现照片丢失,或者其他各种各样的问题.因此,看来自定义一个相机十分的必要. 要自定义相机我 ...

  4. MFC路径层的使用(BeginPath和EndPath函数)

    响应WM_PAINT消息的代码如下: void CTextView::OnDraw(CDC* pDC) { CTextDoc* pDoc = GetDocument(); ASSERT_VALID(p ...

  5. 【Spark】Sparkstreaming-共享变量-缓存RDD-到底是什么情况?

    Sparkstreaming-共享变量-缓存RDD-到底是什么情况? sparkstreaming 多个 rdd_百度搜索 Spark Streaming中空RDD处理及流处理程序优雅的停止 - xu ...

  6. [Canvas]碰撞球

    观赏动态效果请点此下载并用Chrome/Firefox打开index.html 图例: 代码: <!DOCTYPE html> <html lang="utf-8" ...

  7. 使用Nexus管理maven仓库,setting文件理解

    来到新公司对很多陌生的技术一头雾水,以前在工作中没有真正使用过maven,于是强迫自己蛋定下来一个一个的突破,下面是我对maven的setting配置文件的理解,由于是现学的,难免可能会理解偏差,还请 ...

  8. Office办公 WPS如何设置页边距

    打开页眉页脚,在选项里面可以设置顶部的一行文字距离边界的距离   此外在页面布局,页边距也可以查看和修改                        

  9. C#.NET常见问题(FAQ)-如何让TabControl可以动态增加或删除

    动态插入可以使用TabPages.Insert方法   动态删除可以用Remove方法   更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/aceta ...

  10. 【树莓派】在树莓派的Android系统中安装APK应用

    树莓派3 Android TV安装APK应用教程 本文摘自:http://www.mz6.net/news/android/6867.html 树莓派3 Android TV怎样安装软件?对于熟悉AD ...