2009-01-30 174 views
7

注意 我正在运行windows,路径看起来像是linus,因为我手动输入它,这就是我对路径的看法。在命令行运行一个java程序,我做错了什么?

我想运行一个java类我已经构建诊断我的连接到数据库,它引用了oracle jdbc适配器。

当我运行它没有一个类路径:

%> java DBDiagnostics <connectionString> 

我得到一个异常,当它到达下面的代码行:

Class.forName("oracle.jdbc.pool.OracleDataSource").newInstance(); 

但下列情况除外:

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) 

我认为这是因为我需要将它包含在classpath中。

于是,我试着将它添加到类路径是这样的:

%> java -classpath .:ojdbc6.jar DBDiagnostics <connectionString> 

虚拟机只是说,它不能找到类:

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. 

我知道这是一个问题,我应该知道答案是,但我做错了什么?

+0

您的DBDiagnostics类文件是在.JAR中,还是只是在您尝试运行的同一目录中? – 2009-01-30 15:27:13

+0

你在Omar上运行什么平台? – 2009-01-30 15:31:22

+0

在窗口上运行的路径只是我放在显示它是一个路径,而不是发布我的机器的目录结构。分号代替冒号工作谢谢 – 2009-01-30 15:35:44

回答

16

用分号替换冒号:

java -classpath .;ojdbc6.jar DBDiagnostics <connectionString> 
2

有一个错字:

%> java -classpath .:ojdbc6.jar DBDiagnostics <connectionString> 

也许如果您键入该会工作:

%> java -classpath ./ojdbc6.jar DBDiagnostics <connectionString> 
+0

我以为冒号意味着他在Unix/Linux上运行。 – duffymo 2009-01-30 15:29:12

1

是否DBDiagnostics.class文件出现在要从中启动Java的目录?否则,类加载器将无法找到它。

DBDiagnostics类是否有包?如果是这样,则必须引用完全解析的类名称,并且包层次结构的根目录必须显示在启动Java的目录中。

1

迈克Sickler的回答看起来正确的Windows平台。 Windows的路径分隔符是“;”,但对于Unix和Linux来说是“:”,所以确保你总是使用正确的!

1

远射,但是这是Unix还是Windows?如果在Windows上的类路径分隔符应该是一个分号: -

%> java -classpath .;ojdbc6.jar DBDiagnostics <connectionString> 

当然,你需要有在当前目录下的文件ojdbc6.jar如果不指定任何路径。 (可能还有它的依赖关系......)

相关问题