分类:Java


Idea手动安装插件


1.访问:http://plugins.jetbrains.com

2.搜索要下载的插件名称

3.点击下载按钮
注意版本号,可在idea的glugins中搜索查看版本号

4.下载成功后解压

5.点击开始找到idea右键属性点击打开文件位置

6.切换到plugins下

7.将解压的文件夹粘贴进去

8.重启idea搜索插件查看是否添加成功!

Dorado中间件DataGrid控件添加计算列


Dorado说明:

Dorado是锐道公司开发的一个中间件
使前后端完美对接,大大提高了开发速度

与原生安卓的使用方式比较类似,都是通过拉控件设置属性进行页面开发
假设以下是需要展示的表格:
姓名  数学   语文

张三  98     97
李四  88     87
王五  89     90

例如你需要显示数据额成绩和语文成绩的平均分

1.双击DataGrid设置showFooter的值为true
2.双击姓名列,打开onRenderFooterCell
3.在该事件中写入:
  arg.dom.innerText="平均分"
设置之后姓名列对应的显示为“平均分”
4.分别设置需要计算的两列的summaryType的值为average
5.该字段还有一些其他值,例如sum等
  设置后可分别对这些列进行相应的计算
6.设置后的计算列位于DataGrid的最下方,一般位于屏幕最下方
  (第一次搞的时候以为设置错了,一直以为这一列会追加在显示数据的后面!)

7.结果样例:

姓名   数学   语文

张三   88     97
李四   88     97
王五   88     97


平均分 88     97

自定义Java注解


注解的作用:

1.生成文档
这是最常见的,也是java 最早提供的注解。常用的有 @see @param @return 等

2.跟踪代码依赖性,实现替代配置文件功能
Spring中大量运用注解来简化配置文件

3.在编译时进行格式检查

如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出

实现一个简单的注解:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyTarget {
}
上面是一个最简单的注解实现,没有定义任何的属性
需要注意的是@Retention(RetentionPolicy.RUNTIME)是定义注解所必须的。
 
@Retention是注解的注解,称为注解的元注解。
括号里有一个枚举类型的值,即为注解内部定义的值。打开Retention的实现:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    RetentionPolicy value();
}
可以看到这里定义了一个变量value并且没有缺省值,所以不写这个value就会报错。 
继续打开RetentionPolicy:
public enum RetentionPolicy {
    SOURCE,
    CLASS,
    RUNTIME
}
可以发现这个枚举类定义了三个值,这三个值分别代表的是我们定义的MyTarget如何保持。

@Retention(RetentionPolicy.CLASS)
注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候

@Retention(RetentionPolicy.SOURCE)
注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中

@Retention(RetentionPolicy.RUNTIME)
注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时

还需要注意的是java的元注解一共有四个: 
@Document 
@Target 
@Retention 
@Inherited

各个的作用,读者自己查一下吧。

注解处理的一个基础:
 T getAnnotation(Class annotationClass): 
返回改程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。

Annotation[] getAnnotations():
返回该程序元素上存在的所有注解。

boolean is AnnotationPresent(Class annotationClass):
判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false.

Annotation[] getDeclaredAnnotations():
返回直接存在于此元素上的所有注释。
与此接口中的其他方法不同,该方法将忽略继承的注释。
(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)
该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。

实现为属性赋值的注解:
package com.justin.test.util;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface CarNameTarget {
    String name() default "";
}
package com.justin.test.util;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface CarSalerTarget {
    String salerName();

    int age() default 1;
}
package com.justin.test.entity;

import com.justin.test.util.CarNameTarget;
import com.justin.test.util.CarSalerTarget;

/**
 * 描述:
 * 汽车实体类
 *
 * @author 孫兵
 * @create 2018-05-15 10:16
 */
public class BnechCar {
    @CarNameTarget(name = "奔驰")
    private String name;

    @CarSalerTarget(salerName = "justin", age = 22)
    private String salerInfo;
}
package com.justin.test.util;

import java.lang.reflect.Field;

/**
 * 描述:
 * 汽车信息工具类
 *
 * @author 孫兵
 * @create 2018-05-15 10:19
 */
public class CarInfoUtil {

    public static void getFruitInfo(Class<?> clazz) {
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(CarNameTarget.class)) {
                CarNameTarget carNameTarget = field.getAnnotation(CarNameTarget.class);
                String carColour = "汽车的中文名:" + carNameTarget.name();
                System.out.println(carColour);
            } else if (field.isAnnotationPresent(CarSalerTarget.class)) {
                CarSalerTarget carSalerTarget = field.getAnnotation(CarSalerTarget.class);
                String salerInfo = "销售员姓名:" + carSalerTarget.salerName() + ",年龄:" + carSalerTarget.age();
                System.out.println(salerInfo);
            }
        }
    }
}
/**
     * 自定义注解测试
     */
    private void targetTest() {
        CarInfoUtil.getFruitInfo(BnechCar.class);
    }

打印信息:

汽车的中文名:奔驰
销售员姓名:justin,年龄:22

Maven与lib文件夹并存引入异常的问题


1.此处使用开发环境为eclipse
2.项目为maven与lib并存项目(即引用jar包来自两个部分)
3.右键项目选中build path选中configure build path
可以看到maven引入资源中有引入失败的包

解决办法:
1.首选执行maven install,确保maven部分引入的包没有问题

2.确保引入异常的包存在于lib文件夹下

3.选中windows下的Preferences

4.选中maven选中Offline将在线状态改为本地状态点击OK

5.右键项目选中maven选中Update Project

6.此时界面内的Offline应已被选中

7.选中Force Update of Snapshots/Releases点击OK

8.项目更新后重新build path查看,包引入正常了

Eclipse Validating 缓慢的优化


1.点击windows选择preferences

2.选中validation

3.将右侧bulid下选中的勾全部取消

4.点击ok

Java异常No Hibernate Session bound to thread,…


报错信息:
No Hibernate Session bound to thread, 
and configuration does not allow creation of non-transactional one here

今天对一个已完成的项目进行开发,主要针对一张表进行增删改查操作

在开发时没有按照项目已有的格式,例如java的分类规则等

所编辑的代码也没有任何错误,但只要这部分代码被调用就报错

后将此部分代码改为与项目其他部分相同的规则重新调用就没有报错了

虽然写出来读一下感觉是很简单的错误,甚至不是错误
但在实际编码过程中因为一个小问题而影响开发进程的事是很常见的

所以,编码需谨慎!

Eclipse打开项目jar文件全都在项目根目录下的解决方案


1.首先确定这些jar文件的位置
我的是WEB-INF下的lib下的文件

2.右键项目选中build path下的configure build path

3.选中Libraries可看到根目录下多余的jar

4.选中这些jar文件,点击右侧Remove

5.选中Add Library,选中User Library,选中User Libraries

6.点击New 输入Refrence Libriary(自定义)点击ok

7.选中Refrence Libriary点击右侧的Add JARs
选择刚刚删除掉的jar文件路径
点击ok

8.此时回到刚刚删除jar文件的页面,
如果新建的Refrence Libriary已经存在,则直接ok即可

否则
选中Add Library,选中User Library,选中User Libraries
选中刚刚创建的项,点击ok

启动项目出现异常Unsupported major.minor version 52.0


原因:
当你使用了高版本的 JRE(如1.8) 编译出.class 文件,但是运行的时候反而使用低版本的 JRE

major version:

Java SE 8 = 52(当前), 
Java SE 7 = 51, 
Java SE 5.0 = 49, 
JDK 1.4 = 48, 
JDK 1.3 = 47, 
JDK 1.2 = 46

解决方案:

1、使用高版本的 JRE 运行,如当报错为Unsupported major.minor version 52.0时,使用 1.8 运行 
基本适用所有情况

2、适用于自己编译的.class文件时,如若是第三方 jar 包引起的报错,那么可以使用以下方式
using java -target 1.6 option

以下为intellij IDEA解决此问题的步骤,同样适用于Android Studio 
1、安装 JDK 1.8 
2、更改 java compiler 

打开Settings找到java compiler 
设置project bytecode version:1.8
设置Pre-module bytecode version:对应module的version为1.8

3.更改project sdk
打开project Structure
选中project 设置project SDK为1.8
(如没有1.8选项,请在下方SDKs中添加)
设置project language level:
8-Lambdas,...

4.点击apply,ok完成

切换eclipse包显示方式


Eclipse 中包结构展开有两种方式:
一:平坦方式(flat),(如图二);二、分层方式(hierarchical)

点击包机构面板(Package Explorer)右上角的小三角(view menu)

选中其中的Package Presentation即可看到包显示的两种方式选项

在view menu左侧有个双箭头
它的作用就是当我们选中类时快速映射到类对应的包

IllegalArgumentException解决


最近经常性搞一些老项目,老技术,算是了解经典了
那么在这个过程中经常会出现版本不匹配的问题

例如这次,我电脑上的jdk是1.8的
练习的技术使用的是1.7的,虽无明显报错
但是无法正常执行

启动过程一直报IllegalArgumentException

解决办法,重装jdk1.7

为了不走弯路,希望大家在开发过程中一定不要偷懒,看清楚环境要求