在命令行运行java程序,我做错了什么?
注意我正在运行Windows,路径看起来像是linus,因为我手动输入它,这就是我对路径的看法。
我正在尝试运行一个java类我已经构建来诊断我与数据库的连接,它引用了oracle jdbc适配器。
当我在没有类路径的情况下运行它时:
%> java DBDiagnostics
当它到达以下代码行时我得到一个exception:
Class.forName("oracle.jdbc.pool.OracleDataSource").newInstance();
除以下exception:
java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleDataSource at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at DBDiagnostics.GetConnection(DBDiagnostics.java:43) at DBDiagnostics.runDiagnostic(DBDiagnostics.java:29) at DBDiagnostics.main(DBDiagnostics.java:18) Creating connection. java.sql.SQLException: No suitable driver found for lskd at java.sql.DriverManager.getConnection(DriverManager.java:602) at java.sql.DriverManager.getConnection(DriverManager.java:207) at DBDiagnostics.GetConnection(DBDiagnostics.java:55) at DBDiagnostics.runDiagnostic(DBDiagnostics.java:29) at DBDiagnostics.main(DBDiagnostics.java:18) Veryfying connectivity to Database Exception in thread "main" java.lang.NullPointerException at DBDiagnostics.verifyTable(DBDiagnostics.java:86) at DBDiagnostics.verifyTable(DBDiagnostics.java:76) at DBDiagnostics.verifyDatabseConnectivity(DBDiagnostics.java:68) at DBDiagnostics.runDiagnostic(DBDiagnostics.java:36) at DBDiagnostics.main(DBDiagnostics.java:18)
我认为这是因为我需要将它包含在类路径中。
所以,我尝试将它添加到类路径中,如下所示:
%> java -classpath .:ojdbc6.jar DBDiagnostics
VM只是说它无法找到这个类:
Exception in thread "main" java.lang.NoClassDefFoundError: DBDiagnostics Caused by: java.lang.ClassNotFoundException: DBDiagnostics at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) Could not find the main class: DBDiagnostics. Program will exit.
我知道这是一个我应该知道答案的问题,但我做错了什么?
用分号替换冒号:
java -classpath .;ojdbc6.jar DBDiagnostics
有拼写错误:
%> java -classpath .:ojdbc6.jar DBDiagnostics
也许它会工作如果你输入:
%> java -classpath ./ojdbc6.jar DBDiagnostics
DBDiagnostics.class文件是否出现在您启动Java的目录中? 如果没有,类加载器将找不到它。
DBDiagnostics类是否有包? 如果是,则必须引用完全解析的类名,并且包层次结构的根必须出现在启动Java的目录中。
Mike Sickler的答案看起来适合Windows平台。 Windows的路径分隔符是“;”,但Unix和Linux的路径分隔符是“:”,因此请确保始终使用正确的路径!
远射,但这是Unix还是Windows? 如果在Windows上,类路径分隔符应为分号: –
%> java -classpath .;ojdbc6.jar DBDiagnostics
当然,如果您没有指定任何路径,则需要在当前目录中包含ojdbc6.jar文件。 (也可能是它的依赖…)
- Tomcat 6 vs 7 – lib vs shared / lib – jars only?
- Java – 设置类路径
- ClassNotFoundException在修改后的SimpleShortestPathsVertex上运行GiraphRunner
- Axis2客户端的最小类路径是什么?
- 在Tomcat 5上控制WEB-INF / lib中jar的类路径排序?
- ColdFusion:关于使用自定义“自己编写的”Java类
- Java Classpath错误 – 无法找到我的类
- Spring XML中“classpath:”和“classpath:/”有什么区别?
- 如何解决此错误引起:java.lang.ClassNotFoundException