江湖救急 , 官方原版代码出现NullPointerException

@Test
public void index() {
		setAttr("blogPage", Blog.me.paginate(getParaToInt(0, 1), 10));
		render("blog.html");
	}


Junit 测试结果 : 

java.lang.NullPointerException
	at com.jfinal.plugin.activerecord.Model.paginate(Model.java:292)
	at com.jfinal.plugin.activerecord.Model.paginate(Model.java:364)
	at com.demo.common.model.Blog.paginate(Blog.java:20)
	at com.demo.blog.BlogController.index(BlogController.java:18)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:253)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)


@JFinal 波总老大 , 这是为啥 ? 使用的代码是官方提供的那个blog例子


评论区

yigegeman

2016-07-27 09:56

不过前台网页是能正常跑的

JFinal

2016-07-27 10:00

先确定 ActiveRecordPlugin 启动了,否则Model 找不到 Config 还有数据源,必定报 NullPointerException

yigegeman

2016-07-27 10:03

@JFinal 不过前台网页是能正常跑的 , 这个怎么解释 ?

yigegeman

2016-07-27 10:04

@JFinal 怎样确定 ActiveRecordPlugin 是启动的 ?

yigegeman

2016-07-27 10:07

public Page paginate(int pageNumber, int pageSize, String select, String sqlExceptSelect, Object... paras) {
Config config = getConfig();
Connection conn = null;
try {
conn = config.getConnection();
return paginate(config, conn, pageNumber, pageSize, select, sqlExceptSelect, paras);
} catch (Exception e) {
throw new ActiveRecordException(e);
} finally {
config.close(conn); // 这里就是上面第二行异常所说的292行代码
}
}

JFinal

2016-07-27 10:08

@yigegeman 网页你启动了 web 项目,jfinal 调用了 configPlugin 中的 ActiveRecordPlugin 初始化。而你上面这个是测试用例,看下手册中有关 ActiveRecordPlugin 用于非 web 环境的章节

yigegeman

2016-07-27 10:14

@JFinal 好的 , 我去仔细看看先 . 那么按照你说的 , Jfinal不能( 或者不方便 )做单元测试了 ?

JFinal

2016-07-27 11:02

@yigegeman 方便啊,单元测试不是有个 setup() 方法吗? 这个就是专门为测试做准备的啊,在这个 setup() 方法中启动 ActiveRecordPlugin,启动方法在手册中有

yigegeman

2016-07-27 11:07

@JFinal 我是这样写的 , 还是抛同样的异常 .

@Test
public void index() {
PropKit.use("a_little_config.txt");
C3p0Plugin C3p0Plugin = new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
C3p0Plugin.start();
ActiveRecordPlugin arp = new ActiveRecordPlugin(C3p0Plugin);
arp.start();
System.out.println(Blog.me.paginate(1, 10));
}

JFinal

2016-07-27 11:13

@yigegeman 你没映射啊??? arp.addMapping(...) 或者 _MappingKit.mapping(arp),建议先仔细看完手册,再开始开发,少走很多弯路

yigegeman

2016-07-27 11:17

我加了映射 , 还是同样的异常 :

PropKit.use("a_little_config.txt");
C3p0Plugin C3p0Plugin = new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
C3p0Plugin.start();
ActiveRecordPlugin arp = new ActiveRecordPlugin(C3p0Plugin);
arp.start();
// arp.addMapping("blog", Blog.class); // 这样写也不行
_MappingKit.mapping(arp);
System.out.println(Blog.me.paginate(1, 10));

yigegeman

2016-07-27 11:18

@JFinal 我加了映射 , 也是不行 .

yigegeman

2016-07-29 10:48

@JFinal 波总 , "".equals(this.userName) , 这里的空引号表示啥 ? 是一个bean里面的代码 .

yigegeman

2016-07-29 10:51

@JFinal 空引号的问题不用回答了 , 我应该看懂了 .

yigegeman

2016-07-29 10:52

@JFinal 波总 , 我加了映射 , 还是同样的异常 :

PropKit.use("a_little_config.txt");
C3p0Plugin C3p0Plugin = new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
C3p0Plugin.start();
ActiveRecordPlugin arp = new ActiveRecordPlugin(C3p0Plugin);
arp.start();
_MappingKit.mapping(arp);
System.out.println(Blog.me.paginate(1, 10));

圣劳伦兹的眼泪

2018-06-14 10:53

怎么没回复了

圣劳伦兹的眼泪

2018-06-14 10:54

@yigegeman 你是怎么解决的

nutz大仙

2019-04-12 16:09

@JFinal 波总老大,我保存对象的时候出现空指针了,什么情况?

OMG

2020-06-16 09:49

@JFinal 还是不够友好,建议加下相应提示吧,要不还以为自己sql写错了

JFinal

2020-06-16 16:54

@OMG 这个地方需要想个办法提示,目前还没找到好的方案

热门反馈

扫码入社