出现java.lang.threadnullpointerexception异常问题! 为什么怎么办??

悬赏园豆:15
[已解决问题]
&listener& &listener-class&org.springframework.web.util.Log4jConfigListener&/listener-class& &/listener&
&!--监听器 用于初始化spring框架--& &listener& &listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class& &/listener& &!--上下文参数用于log4j以及spring中使用--&&context-param& &param-name&webAppRootKey&/param-name& &param-value&/WEB-INF/log4j.properties&/param-value&&/context-param&
&!--应用程序上下文参数,指定spring配置文件位置--&&context-param& &param-name&contextConfigLocation&/param-name& &param-value&classpath:bean.xml&/param-value&&/context-param&
struts。xml
&struts& &constant name="struts.devMode" value="true" /& &package name="default" namespace="/" extends="struts-default"& &action name="adduser" class="com.jsw.struts2.action.UserAction"& &result name="success"& /index.jsp &/result& &/action& &/package& &/struts&
UserAction.java
public class UserAction extends ActionSupport {
public S public S public UserS
public UserService getUserservice() { }
public void setUserservice(UserService userservice) { this.userservice = }
public String getName() { }
public void setName(String name) { this.name = }
public String getPass() { }
public void setPass(String pass) { this.pass = }
public String execute() { this.adduser();
return "success";
public void adduser() { userservice.adduser();
UserService.java
public class UserService {
private UserDAO
public UserDAO getUserdao() { }
public void setUserdao(UserDAO userdao) { this.userdao = }
public void adduser() { System.out.println("111"); }
&bean id="UserDAO" class="com.jsw.hibernate.dao.UserDAO"& &property name="sessionFactory" ref="sessionFactory"/& &/bean&
&bean id="UserService" class="com.jsw.hibernate.service.UserService"& &property name="userdao" ref="UserDAO"/& &/bean&
&bean id="LoginAction" class="com.jsw.struts2.action.LoginAction"& &property name="userservice" ref="UserService"/& &/bean&
&bean id="UserAction" class="com.jsw.struts2.action.UserAction"& &property name="userservice" ref="UserService"/& &/bean&
结果在UserAction。java执行userservice.adduser();时出错。
Stacktraces
java.lang.NullPointerException
com.jsw.struts2.action.UserAction.adduser(UserAction.java:59)
com.jsw.struts2.action.UserAction.execute(UserAction.java:45)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
java.lang.Thread.run(Unknown Source)
提问于: 17:00
楼主struts.xml ,中实例化了action ,&action name="adduser" class="com.jsw.struts2.action.UserAction"& &
而在spring 中也实例了action,这样实例化对象无法setter ,出现null ,
&bean id="UserAction" class="com.jsw.struts2.action.UserAction"&&property name="userservice" ref="UserService"/&&/bean&
楼主不妨修改为&
struts.xml&
&action name="adduser" class="这里就是spring 注册的action bean 的id"&
eg:&action name="adduser" class="UserAction"&
spring.xml&
&bean id="UserAction" class="com.jsw.struts2.action.UserAction" scope="prototype"&  &property name="userservice" ref="UserService"/&&/bean&
收获园豆:15
|园豆:2605
&&&您需要以后才能回答,未注册用户请先。The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.Java中的ExceptionInInitializerError异常及解决方法 - 推酷
Java中的ExceptionInInitializerError异常及解决方法
当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异常。如果你了解Java中的静态变量,你会知道它们是在类加载的时候进行初始化的。如果在这个静态变量初始化的过程中出现了异常,那么就会抛出 java.lang.ExceptionInInitializerError异常。任何异常都可能会引发这种情况,比如说,java.lang.ArrayIndexOutOfBound或者java.lang.NullPointerException。Java开发人员通常会被这个错误弄晕,他觉得自己并没有定义任何的静态初始化块,为什么还会抛出ExceptionInInitializerError异常;事实上,Java默认会将静态变量的初始化放在一个默认的静态初始化块中,然后按它们在源文件中声明的顺序来进行初始化。比如说变量ABC声明在第一行,在第二行中使用到了,而在第三行的时候才初始化,那么第二行的代码会抛出一个NullPointerException异常,这个异常会被封装到一个ExceptionInInitializerError异常中,如果这段代码在主线程中执行了,你会看到控制台或者日志文件中出现这样的错误信息: &Exception in thread &main& java.lang.ExceptionInInitializerError&。在一个拥有大量日志文件的大型系统中,这样的错误很容易被忽略,而程序员会得到一个java.lang.NoClassDefFoundError异常。不幸的是只有当别人使用到了这个类的时候才会出现这个错误,因为ExceptionInInitializerError导致了这个类无法加载。由于类加载失败了,因此JVM会抛出NoClassDefFoundError。有的时候这会误导Java开发人员,他们会检查类路径,PATH,以及java.library.path看是不是缺少了这个类,却又发现不了任何问题,这让他们很困惑。如果你在分析NoClassDefFoundError的原因,你最好看下你的日志文件中有没有ExceptionInInitializerError,然后再考虑要不要检查classpath。本文中我们将看到一段代码,它会在静态初始化过程中引发异常从而导致 &Exception in thread &main& java.lang.ExceptionInInitializerError&。在稍后的部分,我们将会看到如何去解决这个问题。
Exception in thread &main& java.lang.ExceptionInInitializerError的原因
正如别的错误或者异常一样,当你看见这行信息,你知道这是出现ExceptionInInitializerError异常了,这个异常是由于类加载过程中静态块初始化过程失败所导致的。由于它出现在负责启动程序的主线程中,因此你最好从主类中开始分析,这里说的主类是指你在命令行参数中指定的那个,或者说是你声明了public static void main(String args[])方法的那个类。如果你仔细地看一下完整的堆栈跟踪信息,你其实什么也不用做,因为JVM已经把类名给打印出来了,这就是引发ExceptionInInitializerError的类。ExceptionInInitializerError是LinkageError的子类,这意味着这个异常会导致你的类无法加载到JVM的内存中。现在我们来看一下这个示例程序,它在执行的时候会抛出下面的异常:
Exception in thread &main& java.lang.ExceptionInInitializerError
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411)
at StaticInitiazerDemo.&clinit&(StaticInitiazerDemo.java:15)
看一下栈跟踪信息,你知道真正的异常是java.lang.IndexOutOfBoundsException,它在StaticInitiazerDemo的第二行被抛出来了。这是由于你调用了ArrayList的get()方法并传入了位置0,而这个ArrayList的大小也是0(Index: 0, Size: 0)。看到这条信息后你知道当我们想从列表中取出第一张CreditCard时,这个列表是空的。
import java.util.ArrayL
import java.util.L
* Java Program to understand and solve ExceptionInitializerError, which comes
* When static initializer blocks throws unchecked exception during class loading
* and initialization.
* @author Javin Paul
public class StaticInitializerDemo{
private static final List&CreditCard& cards = new ArrayList&CreditCard&();
private static CreditCard prefferdCard = cards.get(0); // 1st card is default
public static boolean isVisa = &VISA&.equalsIgnoreCase(prefferdCard.getNetwork());
public static void main(String args[]) {
makePayment(prefferdCard);
public static void makePayment(CreditCard cc) {
if (isVisa) {
//offer 5% discount
// deduct payment
class CreditCard {
private long card_ //16 digit card number
// 3 digit cvv number
private int expiryM
private int expiryY
public CreditCard(long card_number, int cvv, int expiryMonth, int expiryYear, String bank, String network) {
this.card_number = card_
this.cvv =
this.expiryMonth = expiryM
this.expiryYear = expiryY
this.bank =
this.network =
* @return the card_number
public final long getCard_number() {
return card_
* @return the cvv
public final int getCvv() {
* @return the expiryMonth
public final int getExpiryMonth() {
return expiryM
* @return the expiryYear
public final int getExpiryYear() {
return expiryY
* @return the bank
public final String getBank() {
* @return the network
public final String getNetwork() {
Exception in thread &main& java.lang.ExceptionInInitializerError
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at StaticInitializerDemo.&clinit&(StaticInitializerDemo.java:15)
这里是Java中所有Error类的类结构。你可以看到ExceptionInInitializerError是继承自LinkageError的。还应当知道的是,像RuntimeException一样,Error也是未检查异常,编译器是不去检查有没有相应的异常处理代码的。
&img src=“/mblogpic/ca5522151fdd6cb9d70c/2000”/&
如何解决Exception in thread &main& java.lang.ExceptionInInitializerError
需要记住以下几点:
1. &Exception in thread &main& java.lang.ExceptionInInitializerError&意味着异常出现在主线程,并且是LinkageError的一个子类java.lang.ExceptionInInitializerError,这是JVM类加载失败时才抛出的,原因是静态初始化代码中出现了诸如IndexOutOfBoundsException或者NullPointerException这样的RuntimeException。
2. 记住JVM会将所有的静态变量的初始化按它们在源文件中的出现顺序放到一个静态初始化块中。因此,不要觉得没有看到静态初始块就认为不会出现这个异常。事实上,你得确保静态变量的正确顺序,比如说,如果 一个变量初始化的时候用到了另一个变量,你得确保这个变量在前面已经初始化过了。
3. 如果别的代码想要使用这个类,则会抛出ExceptionInInitializerError异常,而它又会导致ClassNotFoundException或者NoClassDefFoundError。为什么?因为这个类加载失败了,并没有加载到JVM的内存中。因此如果你在解决类不存在之类的异常时,先看看你的日志文件中有没有这个异常。
4. 记住静态初始化代码块会抛出RuntimeException而不是已检查异常,而后者需要有对应的catch块来进行处理。
这就是关于Exception in thread &main& java.lang.ExceptionInInitializerError的所有东西了。你已经了解到了如何去跟踪此类问题,并找出抛出这个异常的罪魁祸首。需要谨记的是这个异常的一个副作用是NoClassDefFoundError,而Java程序抛出这个异常的位置可能会离java.lang.ExceptionInInitializerError很远,这取决于你的客户端代码何时引用到这个类。因此,在查看类路径解决NoClassDefFoundError异常之前,最好先看看日志有没有出现ExceptionInInitializerError。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致近日在做项目中导出功能的重构,在中间执行单元测试验证功能时,出现一个java.lang.NullPointerException。这个异常对于每日与Exception和Bug打交道的同学们来说,是再熟悉不过的了。NullPointerException,亦即空指针异常,这是当在一个null对象上调用某个方法引起的。按图索骥,定位了产生异常的那行代码。错误信息和代码如下所示(写了个简单的,方便演示):
Exception in thread &main& java.lang.NullPointerException
at BuildingFeatures.getBedRooms(BuildingFeatures.java:8)
at Test.main(Test.java:4)
System.out.printl(buildingFeatures.getBedrooms());
根据经验来讲,这无疑是讲buildingFeatures这个变量是null。于是乎,设断点,重新执行测试,让我意外的是buildingFeatures竟然不是null?WTF?一瞬间,我陷入了陈思、迷茫,多年编程构建起来的世界观,价值观开始慢慢地松动、塌陷。
时间还在继续,无奈,虽然简单如一个getter方法,还是跟进去一探究竟吧。BuildingFeatures只是一个简单的类,典型的贫血模型,除了几个field,默认构造函数,以及对应的getter和setter,再无其他了。
public class BuildingFeatures {
private Integer bedR
public BuildingFeatures() {
public int getBedRooms() {
return bedR
public void setBedRooms(Integer bedRooms) {
this.bedRooms = bedR
狐狸再狡猾,也逃不过猎人的眼睛,终于还是被我发现了问题之所在。问题出在了getter的返回值上。getter返回的是一个int,原始类型,而bedRooms这个field的类型是Integer,在getter内会进行类型的转换,也就是所谓的“拆箱”。要将一个null的Integer值拆箱,抛出一个NullPointerException也就不足为奇了。那getter中具体执行了哪些操作导致这个NullPointerException呢? 我们还是从编译产生的bytecode中一探究竟吧。
javap是一个用来反编译java类文件的小工具,在java的默认安装中有提供。通过如下命令可以看下getter中都执行了哪些操作:
javap -c out/production/untitled/BuildingFeatures.class
以下是输出:
public class BuildingFeatures {
public BuildingFeatures();
0: aload_0
1: invokespecial #1
// Method java/lang/Object.&&init&&:()V
public int getBedRooms();
0: aload_0
1: getfield
// Field bedRooms:Ljava/lang/I
4: invokevirtual #3
// Method java/lang/Integer.intValue:()I
7: ireturn
public void setBedRooms(java.lang.Integer);
0: aload_0
1: aload_1
2: putfield
// Field bedRooms:Ljava/lang/I
5: return}
我们注意下上述代码片段中getBedRooms方法的实现:
aload_0 从当前的frame的局部变量数组中加载第一个变量至当前frame的操作数栈。对于实例方法调用来说,aload_0就是加载当前对象,亦即‘this’。
getfield,操作数栈出栈,获取出栈对象的field值,并入栈
invokevirtual,操作数栈出栈,在出栈对象上执行实例方法调用,本例中也就是执行了Integer.intValue()方法调用。
ireturn,返回int值。
从上面的分析可以看出,我们在第二步时,返回的是一个值为null的Integer类型的变量。然后,在第三部,在该Integer变量上执行intValue()方法时,抛出了NullPointerException。
至此,真相大白。
为什么会选择Integer作为bedRooms这个field的类型呢?其原因是有业务决定的: 在将数据导出的过程中,我们希望只导出包含有效值的数据,针对bedRooms来讲,就是我们希望只有在bedRooms值大于1时才导出这个field。使用Integer而不是int作为field的类型,这样默认初始化BuildingFeatures后,bedRooms的值为null。然后使用Gson导出时,gson是基于field做导出,gson会忽略值为null的field,从而达到了不导出无效数据的业务需求。 在重构中,使用了另外的导出方式,期间会使用到getter方法,所以才暴漏出本文中的问题。
getting方法的返回值是int,竟然与field不一致,这个才是问题的原点。这或许只是作者意识的疏忽吧。
项目中,一直有持续进行Code Review,这样小而隐蔽而诡异的代码中的问题没有能被发现,的确是颇值的反思。Code Review频率不够,导致每次review太多代码,匆匆一扫而过,或许是其中一个需待改进之处。
另外,我料想这个getter方法必然是手写,而非IDE生成。 IDE自然是不会自己修改返回值类型的。照此来看,使用IDE生成诸如getter/setter之类的方法,除了效率之外还有另外一个好处,那就是避免手写可能引入的疏漏。
buildingFeatures实例是null的情况,自然也会抛出NullPointerException,只是给出的调用堆栈信息不同。其实在IDE最初给出的异常信息中,已然定位了问题之所在(请注意给出的异常抛出的行号)。忍不住给
IntelliJ点个赞!
只是在着手分析时,由于思维定势,按照自己的思路多走了些弯路罢了。惭愧啊!
最新教程周点击榜
微信扫一扫java的常见异常与错误总结
绑定的课程:
算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException java.lang.AbstractMethodError 抽象方法错误。当应用试图调用抽象方法时抛出。 java.lang.AssertionError 断言错。用来指示一个断言失败的情况。 java.lang.ClassCircularityError 类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常。 java.lang.ClassFormatError 类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。 java.lang.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。 java.lang.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。 java.lang.IllegalAccessError 违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。 java.lang.IncompatibleClassChangeError 不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。 java.lang.InstantiationError 实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常. java.lang.InternalError 内部错误。用于指示Java虚拟机发生了内部错误。 java.lang.LinkageError 链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。 java.lang.NoClassDefFoundError 未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。 java.lang.NoSuchFieldError 域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义时抛出该错误。 java.lang.NoSuchMethodError 方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。 java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。 java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 java.lang.UnknownError 未知错误。用于指示Java虚拟机发生了未知严重错误的情况。 java.lang.UnsatisfiedLinkError 未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出。 java.lang.UnsupportedClassVersionError 不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误。 java.lang.VerifyError 验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛出该错误。 java.lang.VirtualMachineError 虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情况。 java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。 java.lang.ArrayStoreException 数组存储异常。当向数组中存放非数组声明类型对象时抛出。 java.lang.ClassCastException 类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。 java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。 java.lang.CloneNotSupportedException 不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。 java.lang.EnumConstantNotPresentException 枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象,但该枚举对象并不包含常量时,抛出该异常。 java.lang.Exception 根异常。用以描述应用程序希望捕获的情况。 java.lang.IllegalAccessException 违法的访问异常。当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。 java.lang.IllegalMonitorStateException 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。java.lang.IllegalStateException 违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常。 java.lang.IllegalThreadStateException 违法的线程状态异常。当县城尚未处于某个方法的合法调用状态,而调用了该方法时,抛出异常。 java.lang.IndexOutOfBoundsException 索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。 java.lang.InstantiationException 实例化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。 java.lang.InterruptedException 被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。 java.lang.NegativeArraySizeException 数组大小为负值异常。当使用负数大小值创建数组时抛出该异常。 java.lang.NoSuchFieldException 属性不存在异常。当访问某个类的不存在的属性时抛出该异常。 java.lang.NoSuchMethodException 方法不存在异常。当访问某个类的不存在的方法时抛出该异常。 java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。 java.lang.NumberFormatException 数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。 java.lang.RuntimeException 运行时异常。是所有Java虚拟机正常操作期间可以被抛出的异常的父类。 java.lang.SecurityException 安全异常。由安全管理器抛出,用于指示违反安全情况的异常。 java.lang.StringIndexOutOfBoundsException 字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。 java.lang.TypeNotPresentException 类型不存在异常。当应用试图以某个类型名称的字符串表达方式访问该类型,但是根据给定的名称又找不到该类型是抛出该异常。该异常与ClassNotFoundException的区别在于该异常是unchecked(不被检查)异常,而ClassNotFoundException是checked(被检查)异常。 java.lang.UnsupportedOperationException 不支持的方法异常。指明请求的方法不被支持情况的异常。 异常 javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login (/Login是你的action名字)&& 可能原因 action没有再struts-config.xml 中定义,或没有找到匹配的action,例如在JSP文件中使用 &html:form action=&Login.do&.将表单提交给Login.do处理,如果出现上述异常,请查看struts-config.xml中的定义部分,有时可能是打错了字符或者是某些不符合规则,可以使用strutsconsole工具来检查。 ----------------------------------------------------------------------------------------------------------------- 异常 org.apache.jasper.JasperException: Cannot retrieve definition for form bean null 可能原因&&&&& &&&&&& 这个异常是因为Struts根据struts-config.xml中的mapping没有找到action期望的form bean。大部分的情况可能是因为在form-bean中设置的name属性和action中设置的name属性不匹配所致。换句话说,action和form都应该各自有一个name属性,并且要精确匹配,包括大小写。这个错误当没有name属性和action关联时也会发生,如果没有在action中指定name属性,那么就没有name属性和action相关联。当然当action制作某些控制时,譬如根据参数值跳转到相应的jsp页面,而不是处理表单数据,这是就不用name属性,这也是action的使用方法之一。 ----------------------------------------------------------------------------------------------------------------- 异常 No action instance for path /xxxx could be created 可能原因 特别提示:因为有很多中情况会导致这个错误的发生,所以推荐大家调高你的web服务器的日志/调试级别,这样可以从更多的信息中看到潜在的、在试图创建action类时发生的错误,这个action类你已经在struts-config.xml中设置了关联(即添加了&action&标签)。 在struts-config.xml中通过action标签的class属性指定的action类不能被找到有很多种原因,例如:定位编译后的.class文件失败。Failure to place compiled .class file for the action in the classpath (在web开发中,class的的位置在r WEB-INF/classes,所以你的action class必须要在这个目录下。例如你的action类位于WEB-INF/classes/action/Login.class,那么在struts-config.xml中设置action的属性type时就是action.Login). 拼写错误,这个也时有发生,并且不易找到,特别注意第一个字母的大小写和包的名称。 ----------------------------------------------------------------------------------------------------------------- 异常 javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN 可能原因 没有位form bean中的某个变量定义getter 方法 这个错误主要发生在表单提交的FormBean中,用struts标记&html:text property=”username”&时,在FormBean中必须有一个getUsername()方法。注意字母“U”。 ----------------------------------------------------------------------------------------------------------------- 异常 java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm 可能原因 这个错误主要发生在在classpath中找不到相应的Java .class文件。如果这个错误发生在web应用程序的运行时,主要是因为指定的class文件不在web server的classpath中(/WEB-INF/classes 和 /WEB-INF/lib)。在上面的错误中,原因是找不到ActionForm类。 ----------------------------------------------------------------------------------------------------------------- 异常 javax.servlet.jsp.JspException: Exception creating bean of class org.apache.struts.action.ActionForm: {1} 可能原因 Instantiating Struts-provided ActionForm class directly instead of instantiating a class derived off ActionForm. This mightoccur implicitly if you specify that a form-bean is this Struts ActionForm class rather than specifying a child of this classfor the form-bean. Not associating an ActionForm-descended class with an action can also lead to this error. ----------------------------------------------------------------------------------------------------------------- 异常 javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection 可能原因 不是标识Struts actionServlet的&servlet&标记就是映射.do扩展名的&sevlet-mapping&标记或者两者都没有在web.xml中声明。 在struts-config.xml中的打字或者拼写错误也可导致这个异常的发生。例如缺少一个标记的关闭符号/&。最好使用struts console工具检查一下。 另外,load-on-startup必须在web.xml中声明,这要么是一个空标记,要么指定一个数值,这个数值用来表servlet运行的优先级,数值越大优先级越低。 还有一个和使用load-on-startup有关的是使用Struts预编译JSP文件时也可能导致这个异常。 ----------------------------------------------------------------------------------------------------------------- 异常 java.lang.NullPointerException at org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1223) 可能原因 在struts-config.xml中的forward元素缺少path属性。例如应该是如下形式: &forward name=&userhome& path=&/user/userhome.jsp&/& ----------------------------------------------------------------------------------------------------------------- 异常 javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope & Probable Causes 试图在Struts的form标记外使用form的子元素。这常常发生在你在&/html:form&后面使用Struts的html标记。另外要注意可能你不经意使用的无主体的标记,如&html:form … /&,这样web 服务器解析时就当作一个无主体的标记,随后使用的所有&html&标记都被认为是在这个标记之外的,如又使用了&html:text property=”id”&还有就是在使用taglib引入HTML标记库时,你使用的prefix的值不是html。 ----------------------------------------------------------------------------------------------------------------- 异常 javax.servlet.jsp.JspException: Missing message for key xx.xx.xx Probable Causes 这个key的值对没有在资源文件ApplicationResources.properties中定义。如果你使用eclipse时经常碰到这样的情况,当项目重新编译时,eclipse会自动将classes目录下的资源文件删除。 资源文件ApplicationResources.properties 不在classpath中应将资源文件放到 WEB-INF/classes 目录下,当然要在struts-config.xml中定义) ----------------------------------------------------------------------------------------------------------------- 异常 Cannot find message resources under key org.apache.struts.action.MESSAGE 可能原因 很显然,这个错误是发生在使用资源文件时,而Struts没有找到资源文件。 Implicitly trying to use message resources that are not available (such as using empty html:options tag instead of specifyingthe options in its body -- this assumes options are specified in ApplicationResources.properties file) XML parser issues -- too many, too few, incorrect/incompatible versions ----------------------------------------------------------------------------------------------------------------- 异常 Strange and seemingly random characters in HTML and on screen, but not in original JSP or servlet. 可能原因 混和使用Struts的html:form标记和标准的HTML标记不正确。 使用的编码样式在本页中不支持。 ----------------------------------------------------------------------------------------------------------------- 异常 &Document contained no data& in Netscape No data rendered (completely empty) page in Microsoft Internet Explorer 可能原因 使用一个Action的派生类而没有实现perform()方法或execute()方法。在Struts1.0中实现的是perform()方法,在Struts1.1中实现的是execute()方法,但Struts1.1向后兼容perform()方法。但你使用Struts1.1创建一个Action的派生类,并且实现了execute()方法,而你在Struts1.0中运行的话,就会得到&Document contained nodata& error message in Netscape or a completely empty (no HTML whatsoever) page rendered in Microsoft Internet Explorer.”的错误信息。 --------------------------------------------------------------------------------------------------------------------------- 异常 ServletException: BeanUtils.populate 解决方案 在用Struts上传文件时,遇到了javax.servlet.ServletException: BeanUtils.populate异常。 我的ActionServlet并没有用到BeanUtils这些工具类。后来仔细检查代码发现是在jsp文件里的form忘了加enctype=&multipart/form-data& 了。所以写程序遇到错误或异常应该从多方面考虑问题存在的可能性,想到系统提示信息以外的东西。 ---------------------------------------------------------------------------------------------------------------------------- 1. 定义Action后, 如果指定了name, 那么必须要定义一个与它同名的FormBean才能进行form映射.2. 如果定义Action后, 提交页面时出现 &No input attribute for mapping path...& 错误, 则需要在其input属性中定义转向的页面.3. 如果插入新的数据时出现 &Batch update row count wrong:...& 错误, 则说明XXX.hbm.xml中指定的key的类型为原始类型(int, long),因为这种类型会自动分配值, 而这个值往往会让系统认为已经存在该记录, 正确的方法是使用java.lang.Integer或java.lang.Long对象.4. 如果插入数据时出现 &argument type mismatch& 错误, 可能是你使用了Date等特殊对象, 因为struts不能自动从String型转换成Date型,所以, 你需要在Action中手动把String型转换成Date型.5. Hibernate中, Query的iterator()比list()方法快很多.6. 如果出现 &equal symbol expected& 错误, 说明你的strtus标签中包含另一个标签或者变量, 例如: &html:select property=&test& onchange=&&%=test%&&/& 或者 &html:hidden property=&test& value=&&bean:write name=&t& property=&p&/&&/& 这样的情况... --------------------------------------------------------------------------------------------------------------------------- 错误:Exception in thread &main& org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update原因与解决:&&&&& 因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml工具中包含有catalog=&***&(*表示数据库名称)这样的属性,将该属性删除就可以了 --------------------------------------------------------------------------------------------------------------------------- 错误:org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations) 原因与解决: 方法1 删除Set方的cascade 方法2 解决关联关系后,再删除 方法3 在many-to-one方增加cascade 但值不能是none 最后一招: 检查一下hashCode equals是否使用了id作为唯一标示的选项了;我用uuid.hex时是没有问题的;但是用了native,就不行了,怎么办?删除啊! ---------------------------------------------------------------------------------------------------------------------------- 问题:今天用Tomcat 5.5.12,发现原来很好用的系统不能用了,反复测试发现页面中不能包含 taglib,否则会出现以下提示:HTTP Status 500 -type Exception reportMessage description The server encountered an internal error () that prevented it from fulfilling this request.exceptionorg.apache.jasper.JasperException: /index.jsp(1,1) Unable to read TLD &META-INF/tlds/struts-bean.tld& from JAR file&file:*****/WEB-INF/lib/struts.jar&:原因:更新了工程用的lib文件夹下的jar,发布时也发布了servlet.jar和jsp-api.jar。解决:把jsp-api.jar删除就解决这个问题了。----------------------------------------------------------------------------------------------------------------------------- 错误: java.lang.NullPointerException 原因: 发现 dao 实例、 manage 实例等需要注入的东西没有被注入(俗称空指针异常)解决:这个时候,你应该查看日志文件;默认是应用服务器的 log 文件,比如 Tomcat 就是 [Tomcat 安装目录 ]/logs ;你会发现提示你:可能是:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in ServletContextresource [/WEB-INF/applicationContext.xml]: Initializ nested exception isorg.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xmlorg.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xml……………………….Caused by: java.io.FileNotFoundException: src/hibernate.cfg.xml可能是:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined inServletContext resource [/WEB-INF/applicationContext.xml]: Initializ nested exception isorg.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not foundorg.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not found然后你就知道原因是因为配置文件的解析出了错误,这个通过 Web 页面是看不出来的。更多的是持久化影射文件出的错误;导致了没有被解析;当然你需要的功能就无法使用了。 ---------------------------------------------------------------------------------------------------------------------------- 错误:StandardWrapperValve[action]: Servlet.service() for servlet action threw exception javax.servlet.jsp.JspException: Cannot retrieve mapping for action /settlementTypeManage 或者:&&&&& type Status report&&&&& message Servlet action is not available&&&&& description The requested resource (Servlet action is not available) is not available. 原因: 同 上 ---------------------------------------------------------------------------------------------------------------------------- 错误StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exceptionjava.lang.ClassNotFoundException: org.apache.struts.taglib.bean.CookieTei界面错误具体描述: org.apache.jasper.JasperException: Failed to load or instantiate TagExtraInfo class: org.apache.struts.taglib.bean.CookieTei &&&&& 原因与解决:&&& &方案一&你的“html:”开头的标签没有放在一个&html:form&中&&&&&& &方案二&重新启动你的应用服务器,自动就没有这个问题
已学习课程数:4
已发表笔记数:117
Java线程池使用说明一简介线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。二:线程池线程池的作用:线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥
  本篇文章通过一个实际工作中遇到的例子开始吧:  工程使用Spring+Mybatis+Mysql开发。具体的业务逻辑很重,对象之间一层一层的嵌套。和数据库表对应的是大量的model类,而和前端交互的是Vo类。现在需要做一个需求,有两种方式来实现:  使用现有的Service接口,或者自己在编写一些用到的接口,手动使用Java代码来分别调用Service接口来查出各个model,然后在业务层将model转换为vo,最后返回给前端json串。&&&&& 为
转自:http://miaoxiaodong78./blog/static//& Decorator设计模式是典型的结构型模式(在GOF的那本模式的Bible中将模式分为:1.创建型模式;2.结构型模式;3.行为模式三种)。它的主要用意是:动态地为对象添加一些额外的功能。(记住上面两种颜色的词汇,理解装饰器模式的精髓所在!)下面是GOF的《Element of reusable Object-Oriented Software
序列化:将java对象转换为字节序列的过程叫做序列化反序列化:将字节对象转换为java对象的过程叫做反序列化通常情况下,序列化有两种用途:、1) 把对象的字节序列永久的保存在硬盘中2)在网络上传输对象的字节序列相应的API  java.io.ObjectOutputStream          writeObject(Object obj)  java.io.ObjectInputStream          readObject()只有实现了Serializable或者Externalizable接
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式一般涉及到的角色有:
  抽象角色:声明真实对象和代理对象的共同接口;
  代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
  真实角色:代
首先什么是注解?  最常见的是,在我们使用Eclipse等工具编写java代码的时候,有时候会出现一些比如@Deprecated,@Override,@SuppressWarnings等东东。这个就是常见的几种注解。   在开发Java程序,尤其是Java EE应用的时候,总是免不了与各种配置文件打交道。以Java EE中典型的S(pring)S(truts)H(ibernate)架构来说,Spring、Struts和Hibernate这三个框架都有自己的XML格式的配置文件。这些配置文件需要与Java源
以前没有写笔记的习惯,现在慢慢的发现及时总结是多么的重要了,呵呵。虽然才大二,但是也快要毕业了,要加油了。这一篇文章主要关于java多线程,主要还是以例子来驱动的。因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,呵呵、大家可以去参考一些那些书籍。我这个文章主要关于实际的一些问题。同时也算是我以后复习的资料吧,。呵呵大家多多指教。同时希望多结交一些技术上的朋友。谢谢。-----------------------------------------------------------------
在一个类编译完成之后,下一步就需要开始使用类,如果要使用一个类,肯定离不开JVM。在程序执行中JVM通过装载,链接,初始化这3个步骤完成。类的装载是通过类加载器完成的,加载器将.class文件的二进制文件装入JVM的方法区,并且在堆区创建描述这个类的java.lang.Class对象。用来封装数据。但是同一个类只会被类装载器装载以前链接就是把二进制数据组装为可以运行的状态。链接分为校验,准备,解析这3个阶段校验一般用来确认此二进制文件是否适合当前的JVM(版本),准备就是为静态成员分配内存空间,。并设置默
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。下面开始正文。【案例1】通过一个对象获得完整的包名和类名?package R/*** 通过一个对象获得完整的包名和类名* */class Demo{//other codes...}class hello{public static void main(String[] args) {Demo
前提Hadoop版本:hadoop-0.20.2概述在上一篇文章中HDFS源码分析(9):DFSClient初步介绍了HDFS客户端的相关内容,但由于篇幅关系,没有对HDFS的输入/输出流进行介绍,而这正是本文的重点。数据的读取和写入是客户端最重要的功能,也是最主要的逻辑,本文将分成输入和输出两部分对HDFS的文件流进行分析。主要的类位于org.apache.hadoop.hdfs.DFSClient类中。DFSInputStreamDFSInputStream的主要功能是向namenode获取块信息,并
1. 通过freemarker静态化
2. 通过jsp filter静态化
主要思路:请求servlet-&判断静态文件是否存在并且静态文件创建时间是否在阀值之内--&如果不是,则访问数据库生成静态文件-&否则直接跳转静态文件
然后通过urlReWrite直接将访问servlet的请求改为html,完成seo
最后通过SQUID缓存前台数据
一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例
java.io.IOE
java.io.InputS
java.io.OutputS
java.io.OutputStreamW
java.io.PrintW
java.net.InetSocketA
java.util.L
java.util.M
& Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效
流的概念和作用学习Java IO,不得不提到的就是JavaIO流。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类&&&&&& 根据处理数据类型的不同分为:字符流和字节流&&&&&& 根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由来:
&Example 1 Below is a simple Java program which can get the hostname of a computer
from IP address. download now Tips
1. Compile: javac GetHost
2. Run: java GetHost 111.111.111.1(your IP or others)
import java.io.*;
import java.net.*;
一:理解多线程
多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。
线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。
多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心
  下面是我原来在CSDN论坛上看到的一个贴子,涉及到同步,wait(),notify()等概念的理解,我试着根据原来的一些回复和Think in Java上的相关概念将wait()和notify()这两个方法剖析了一下,欢迎指教.
  问题如下:
  //分析这段程序,并解释一下,着重讲讲synchronized、wait(),notify 谢谢!
  class ThreadA
   public static void main(String[] args)
一. Thread.yield( )方法:使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。Java线程中有一个Thread.yield( )方法,很多人翻译成线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行。打个比方:现在有很多人在排队上厕所,好不容易轮到这个人上厕所了,突然这个人
一、Thread.start()与Thread.run()的区别通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有“主线程”这一个线程,并没有开辟新线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。测试代码如下
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。这一点是通过java.lang.Runnable.run()方法声明(因为此方法声明上没有throw exception部分)进行了约束。但是线程依然有可能抛出unchecked exception,当此类异常跑抛出时,线程就会终结,而对于主线程和其他线程完全不受影响,且完全感知不到某个线程抛出的异常(也是说完全无法catch到这个异常)。JVM
1、index 创建的时候一定要计算好shard,因为主分片一经确认是不能修改的,每一个分片上面独立运行着一个lucene程序;因此设置主分片的时候尽量考虑未来发展需求,如果当前有1G数据,使用默认分片5个,每一个主分片数据相当于200M数据(hash(ID)%max_shards进行数据分片存储的),但是随着时间推移如果3个月后数据变成100G了,但是主分片还是5个,每一个上面就是20G的数据,会大大降低处理性能;(2.3.1版本增加了对index的动态迁移能力,也许可以快速的处理这一问题)。2、字段的
&&&&动力节点Java培训  下面给出的Java开发中ClassLoader中的描述,哪些描述是正确的(C)&AClassLoader没有层次关系&B所有类中的ClassLoader都是AppClassLoader&C通过classforname(StringclassName)能够动态加载一个类&D不同的ClassLoader加载同一个Class文件,所得的类是相同的&  拓展知识ClassLoader知识
动力节点Java培训  面试题:Java是如何管理内存的?&  答案:Java的内存管理就是对象的分配和释放问题。在Java中,Java程序员需要通过关键字new为每个对象申请内存空间,所有的对象在堆中分配空间。另外,对象的释放是有GC决定和执行的。在Java中,内存的分配是由程序完成的。而内存的释放室友GC完成的,这种收支两条线的方法确实简化了程序员的工作。但同时,它也加重了JVM的工作。这也是Java程序运行速度较慢的原因之一。因为GC为了能够正确释放对象,必须监控每一个对象的运行状态,包括
&&&&动力节点Java培训  面试题&Whichofthefollowingwillcompilecorrectly?(D)&Ashortmyshort=99S&Bintt=”abc”.length()&Cfloatz=1.0&Dcharc=17c&  解析:shortmyshort=99S这句要执行自动装箱,调用shortvalue方法,显然99S无法得到值。&  将floatz=1.0;改为
&动力节点Java培训  面试题:Java中的垃圾收集器相对于以前的语言优势是什么?&  答案:过去的语言(如C语言)要求程序员显示的分配内存、释放内存。程序在需要时分配内存,不需要时释放内存。但是这种做法常常引起“内存泄露”,即由于某种原因使分配的内存始终没有得到释放。如果该任务不断重复,程序最终会耗尽内存并异常终止,至少无法继续运行。相比之下,Java开发不要求程序员显示的分配地分配内存和释放内存,避免了很多潜在问题。Java在创建对象时会自动分配内存,并当该对象的引用不存在时释放
动力节点Java培训&  面试题:下面哪一项说法是正确的?&A:在一个子类中,一个方法不是public的就不能被重载&B:覆盖一个方法只需要满足相同的方法名和参数类型就可以了&C:覆盖一个必须要有相同的方法名参数和返回类型&D:一个覆盖的方法必须有相同的方法名、参数名和参数类型&  答案:C&  问题解析:对于在同一个访问区被声明的几个具有不同参数列的同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制叫重载,重载不关心函数
&——动力节点java&  面试题:下面哪个选项的说法是正确的?&A:构造函数不能被重载&B:构造函数不能被覆盖&C:一个构造函数可以返回一个私有的或一个对象的引用&D:构造函数代码执行时是从当前的类层级到它祖先的类&  答案:B&  问题解析:重载构造函数是一个主要的技术,可以允许多种方式初始化一个类。通过定义,构造函数是没有返回值的。所以选项C是错误的,这种说法并没有任何意义。选项D中构造函数代码的执行是从它最老的祖先类开
&——动力节点java&  面试题&  什么是reflection?其他语言有这种特点吗?&  答案:Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行链接。反射允许在编写与执行时,使程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活应用的主要工具。需要注意的是,如果使用不当,发射的成本会很高。&Java中的类发射reflection是Java程序开发语言的
动力节点Java培训  现如今的计算机专业绝大多数的学生是零基础,毕业之际,有的成了大神,有的还是零基础,所以零基础的同学只有找对方向,才能成功,下面就动力节点的Java老师分享一下多年的教学经验,让你从零基础Java小白变成人人羡慕的Java大神。&1.学会写程序&  程序就是,将自己的思考用程序表现出来。比如复杂的小工具、大数计算器等。这个过程中你逐渐了解数组、指针、内存布局、函数,了解递归、栈、链表,然后学习基本的数据结构。之后再写程序,你需要考虑代码的优雅、简单、时间空间效率高
Storm单机+zookeeper集群安装
1、安装zookeeper集群
2、准备机器
10.10.3.44 flumemaster1
10.10.3.129 flumemaster2
10.10.3.132 flumecollector1
10.10.3.115 flumeNg1
3、配置hosts文件(4台服务器上面都需要配置)
vi /etc/hosts
需求:将mysql中的表b05_age的数据导入hive中
yum install sqoop(sqoop必须安装在有hive client的服务器上面,如果没有执行yum install hive)
复制mysql的驱动jar到/usr/lib/sqoop/lib下面
2、异常处理
正确命令:(将关系型数据的表结构复制到hive中)
sudo -u hive sqoop create-hive-table --connect jdbc:my
准备机器:
192.168.1.241
192.168.1.242
192.168.1.243
1、查看ip地址是否为静态ip,如果不是进行配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.1.241
1. 我用的Oracle 客户端最好的工具是PL/SQL Developer, 当然,如果用免费的Toad也不错,感觉现在用Toad的人还是挺多的。
2. Oracle SQL如果想提高速度有几个方式
1)创建索引,尽量建立唯一索引
2)当要创建的索引列的值取值比较小,建议创建Bitmap的索引而不是默认的Btree的。(比如性别,学历等)
3)在where条件后尽量采用数字类型的字段,比varchar的速度快
4)尽量不用用IN,Not In,union这样的条件查
1. 通过freemarker静态化
2. 通过jsp filter静态化
主要思路:请求servlet-&判断静态文件是否存在并且静态文件创建时间是否在阀值之内--&如果不是,则访问数据库生成静态文件-&否则直接跳转静态文件
然后通过urlReWrite直接将访问servlet的请求改为html,完成seo
最后通过SQUID缓存前台数据
一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例
java.io.IOE
java.io.InputS
java.io.OutputS
java.io.OutputStreamW
java.io.PrintW
java.net.InetSocketA
java.util.L
java.util.M
服务器优化说明
WEB服务器优化
更换tomcat5为tomcat6
版本copy测试服务版本即可
加大tomcat内存
修改bin下的catalina.sh文件,增加青绿色部分
JAVA_OPTS='-Xms768m -Xmx1648m -XX:MaxPermSize=512m'
加大tomcat连接数
修改conf下的server.xml文件,修改青绿色部分参数值
s.username,
decode(l.type,'tm','table lock','tx','row lock',null) lock_level,
o.object_name,
o.object_type,
s.serial#,
s.terminal,
s.machine,
s.program,
from v$session s,v$lock l,dba_objects o
where l.sid = s.s
一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的Flume+Kafka+Storm的实时日志流系统的搭建文档,自己也跟着整了一遍,之前罗宝的文章中有一些要注意点没提到的,以后一些写错的点,在这边我会做修正;内容应该说绝大部分引用罗宝的文章的,这里要谢谢罗宝兄弟,还有写这篇文章@晨色星空J2EE也给了我很大帮助,这里也谢谢@晨色星空J2EE之前在弄这个的时候,跟群里的一些人讨论过,有的人说,直接用storm不就可以做实时处理了,用不着那么麻烦;其实不然,做软件开发的都知道模块化
1. Storm介绍2. Storm环境配置3. Storm程序流程4. Storm总结及问题1. Storm介绍 1.1&实时流计算背景 随着互联网的更进一步发展,信息浏览、搜索、关系交互传递型,以及电子商务、互联网旅游生活产品等将生活中的流通环节在线化。对于实时性的要求进一步提升,而信息的交互和沟通正在从点对点往信息链甚至信息网的方向发展,这样必然带来数据在各个维度的交叉关联,数据爆炸已不可避免。因此流式处理和NoSQL产品应运而生,分别解决实时框架和数据大 规模存储计算的问题。 流式处理可

我要回帖

更多关于 java.lang.thread 的文章

 

随机推荐