我看过其他与此问题相关的帖子,但似乎无法理解和/或适用于我的代码来解决问题。因此,您的帮助将非常有用。
这是错误堆栈跟踪:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JPanel;
public class Screen extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
public static final int WIDTH = 800, HEIGHT = 800;
private Thread thread;
private boolean running = false;
private BodyPart b;
private ArrayList<BodyPart> snake;
private Apple apple;
private ArrayList<Apple> apples;
private Random r;
private int xCoor = 20, yCoor = 20;
private int size = 10;
private int score = 0;
private boolean right = true, left = false, up = false, down = false;
private int ticks = 0;
private Key key;
public Screen() {
setFocusable(true);
key = new Key();
addKeyListener(key);
setPreferredSize(new Dimension(WIDTH, HEIGHT));
r = new Random();
snake = new ArrayList<BodyPart>();
apples = new ArrayList<Apple>();
start();
}
public void reset() {
snake.clear();
apples.clear();
xCoor = 20;
yCoor = 20;
size = 10;
score = 0;
running = true;
}
public void tick() {
if(snake.size() == 0) {
b = new BodyPart(xCoor, yCoor, 20);
snake.add(b);
}
if(apples.size() == 0) {
int xCoor = r.nextInt(40);
int yCoor = r.nextInt(40);
apple = new Apple(xCoor, yCoor, 20);
apples.add(apple);
}
for(int i = 0; i < apples.size(); i++) {
if(xCoor == apples.get(i).getxCoor() && yCoor == apples.get(i).getyCoor()) {
size++;
apples.remove(i);
score += 10;
i--;
}
}
for(int i = 0; i < snake.size(); i++) {
if(xCoor == snake.get(i).getxCoor() && yCoor == snake.get(i).getyCoor()) {
if(i != snake.size() - 1) {
reset();
}
}
}
if(xCoor < 0) xCoor = 40;
if(xCoor > 40) xCoor = 0;
if(yCoor < 0) yCoor = 40;
if(yCoor > 40) yCoor = 0;
ticks++;
if(ticks > 250000) {
if(right) xCoor++;
if(left) xCoor--;
if(up) yCoor--;
if(down) yCoor++;
ticks = 185000;
b = new BodyPart(xCoor, yCoor, 20);
snake.add(b);
if(snake.size() > size) {
snake.remove(0);
}
}
}
public void paint(Graphics g) {
g.clearRect(0, 0, WIDTH, HEIGHT);
g.drawString("Score: " + score, 100, 100);
g.setColor(Color.WHITE);
g.setColor(new Color(20, 50, 0));
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.BLACK);
for(int i = 0; i < WIDTH / 20; i++) {
g.drawLine(i * 20, 0, i * 20, HEIGHT);
}
for(int i = 0; i < HEIGHT / 20; i++) {
g.drawLine(0, i * 20, WIDTH, i * 20);
}
for(int i = 0; i < snake.size(); i++) {
snake.get(i).draw(g);
}
for(int i = 0; i < apples.size(); i++) {
apples.get(i).draw(g);
}
}
public void start() {
running = true;
thread = new Thread(this, "Game Loop");
thread.start();
}
public void stop() {
running = false;
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void run() {
while(running) {
tick();
repaint();
}
}
private class Key implements KeyListener {
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_RIGHT && !left) {
up = false;
down = false;
right = true;
}
if(key == KeyEvent.VK_LEFT && !right) {
up = false;
down = false;
left = true;
}
if(key == KeyEvent.VK_UP && !down) {
left = false;
right = false;
up = true;
}
if(key == KeyEvent.VK_DOWN && !up) {
left = false;
right = false;
down = true;
}
}
}
我的FormMatrixDaoImpl类:
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot load JDBC driver class 'com.ibm.db2.jcc.DB2Driver'
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:627)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:692)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:724)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:734)
at org.springframework.jdbc.core.JdbcTemplate.queryForRowSet(JdbcTemplate.java:899)
at com.cinfin.edocs.services.dao.FormMatrixDaoImpl.validateNonProductionStatusInMatrix(FormMatrixDaoImpl.java:857)
at com.cinfin.edocs.services.dao.FormMatrixDaoImplTest.testValidateNonProductionStatusInMatrix(FormMatrixDaoImplTest.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:72)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:81)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:216)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:82)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:60)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:67)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:162)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.sql.SQLException: Cannot load JDBC driver class 'com.ibm.db2.jcc.DB2Driver'
at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2001)
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1897)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
... 36 more
Caused by: java.lang.ClassNotFoundException: com.ibm.db2.jcc.DB2Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:1992)
... 40 more
我的FormMatrixDaoImplTest类:
import javax.sql.DataSource;
@Repository
public class FormMatrixDaoImpl extends NamedParameterJdbcDaoSupport implements FormMatrixDao {
@Autowired
public FormMatrixDaoImpl(@Qualifier("vitDataSource") DataSource dataSource, @Value("#{edocsQueryMap}") HashMap<String, String> edocsQueryMap) {
super();
@Override
public SqlRowSet validateNonProductionStatusInMatrix(String projectId) throws SQLException {
logger.info("validateNonProductionStatusInMatrix. projectId: "+projectId);
SqlRowSet ret = getJdbcTemplate().queryForRowSet(qValidateNonProductionStatusInMatrix, new Object[] {projectId});
return ret;
}
}
我的datasources.xml文件:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:datasources.xml","classpath:edocservices.xml","classpath:edocservicesclients.xml", "/WEB-INF/edocservices-servlet.xml"})
@ActiveProfiles("local")
public class FormMatrixDaoImplTest {
@Autowired
private FormMatrixDaoImpl formMatrixDaoImpl;
public FormMatrixDaoImpl getFormMatrixDaoImpl() {
return formMatrixDaoImpl;
}
public void setFormMatrixDaoImpl(FormMatrixDaoImpl formMatrixDaoImpl) {
this.formMatrixDaoImpl = formMatrixDaoImpl;
}
@Test
public final void testValidateNonProductionStatusInMatrix() throws SQLException {
SqlRowSet test = formMatrixDaoImpl.validateNonProductionStatusInMatrix("0b003e8880072976");
assertEquals(test,null);
}
我的edocservices.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd">
<beans profile="production,user,quality,development">
<bean id="vitDataSource" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
<description>JNDI VITEDOC DB2 datasource</description>
<property name="jndiName" value="${database.vitedoc.jndi}"/>
</bean>
<bean id="docDataSource" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
<description>JNDI DOCEDOC DB2 datasource</description>
<property name="jndiName" value="${database.docedoc.jndi}"/>
</bean>
<beans profile="local">
<bean id="vitDataSource" class="org.apache.commons.dbcp2.BasicDataSource" lazy-init="true" destroy-method="close">
<description>Standalone VITEDOC datasource</description>
<property name="driverClassName" value="${database.vitedoc.driver.classname}"/>
<property name="url" value="${database.vitedoc.url}" />
<property name="username" value="${database.vitedoc.username}"/>
<property name="password" value="${database.vitedoc.password}"/>
</bean>
<bean id="docDataSource" class="org.apache.commons.dbcp2.BasicDataSource" lazy-init="true" destroy-method="close">
<description>Standalone DOCEDOC datasource</description>
<property name="driverClassName" value="${database.docedoc.driver.classname}"/>
<property name="url" value="${database.docedoc.url}" />
<property name="username" value="${database.docedoc.username}"/>
<property name="password" value="${database.docedoc.password}"/>
</bean>
</beans>
上面的xml有marshallers,unmarshallers,endpoints&amp;的WSDL。
这是我的edocservicesclient.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:ws="http://www.springframework.org/schema/web-services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.1.xsd">
上面的xml还有一些其他的marshallers,unmarshallers和saajmessagefactory。
这是我的edocservices-servlet.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:oxm="http://www.springframework.org/schema/oxm"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-4.1.xsd">
<context:property-placeholder location="classpath:edocservices.properties"/>
<context:component-scan base-package="com.cinfin.edocs.services"/>
当我将FormMatrixDaoImplTest类作为JUnit测试运行时,我得到了无法获得jdbc连接错误。此错误仅与JUnit测试相关联,并且在程序本地运行时不会出现。所以我有一种感觉,我可能会错过JUnit设置或类似的东西。
任何帮助指出代码中的错误/错误和/或指向其他方式来测试运行&#39;选择&#39;从数据库中检索数据的命令将受到高度赞赏。
提前谢谢。
答案 0 :(得分:1)
错误无法加载JDBC驱动程序类&#39; com.ibm.db2.jcc.DB2Driver
&#39;声明包含类的jar在运行时类路径中不可用。确保包含类的jar可用。
答案 1 :(得分:0)
1)从我上面的笔记:
听起来你可能正在使用Spring on WebSphere。核心 您的日志中的错误是
Cannot load JDBC driver class com.ibm.db2.jcc.DB2Driver
。建议:
- 跟踪JNDI定义(例如,
醇>vitDataSource
)定义其驱动程序的位置 类名(如database.vitedoc.driver.classname
)2)确保这一点 DB2Driver可用作WebSphere Admin中的JDBC资源 安慰 ......和/或......
3)确保在您的配置中配置了DB2驱动程序.jar pom.xml(如果你使用的是Maven)。
2)你已经确认:
“......类名定义为:database.vitedoc.driver.classname = com.ibm.db2.jcc.DB2Driver”
&lt; =好!
3)所以现在你需要做的就是:
a)确保你有一个有效的db2jcc.jar:
http://www-01.ibm.com/support/docview.wss?uid=swg21363866
b)确保.jar在类路径中
如果您正在运行WebSphere,我的首选是在WebSphere Admin控制台中执行此操作:
如果这是一个简单的Web应用程序,您只需将其添加到Eclipse项目的\ lib文件夹中:
答案 2 :(得分:0)
以下是如何将第三方库添加到eclipse中。