Läuft ein java-Programm auf der Kommandozeile, was mache ich falsch?
Hinweis
Ich bin mit windows, den Pfad einfach wie es aussieht ist linus da tippte ich es manuell und das ist, wie ich glaube, von Pfade.
Ich versuche zu laufen, eine java-Klasse, die ich gebaut habe, um zu diagnostizieren, meine Verbindung zu einer Datenbank, sondern verweist auf die oracle-jdbc-Adapter.
Wenn ich führen Sie es einfach ohne einen class-path:
%> java DBDiagnostics <connectionString>
Ich erhalte eine Ausnahme, wenn es reicht die folgende code-Zeile:
Class.forName("oracle.jdbc.pool.OracleDataSource").newInstance();
mit der folgenden Ausnahme:
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)
Ich gehe davon aus, dass dies ist, weil ich es in den classpath.
So, ich versucht, indem Sie dem classpath wie diese:
%> java -classpath .:ojdbc6.jar DBDiagnostics <connectionString>
Die VM nur sagt, es kann nicht finden den Klasse:
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.
Ich weiß, das ist eine Frage, die ich sollte nur wissen, die Antwort, aber was mache ich falsch?
- Ist Ihre DBDiagnostics class Datei in eine .JAR, oder ist es einfach in das gleiche Verzeichnis, das Sie versuchen zu laufen?
- Auf welcher Plattform laufen Sie auf Omar?
- Läuft auf windows der Pfad war einfach etwas, das ich in zu zeigen, es war ein Pfad, sondern als Veröffentlichung der Verzeichnisstruktur meines Rechners. Semikolon statt Doppelpunkt gearbeitet Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersetzen den Doppelpunkt durch ein Semikolon:
ist es ein Tippfehler:
vielleicht würde es funktionieren, wenn Sie eingeben:
.:
im Gegensatz zu./
Funktioniert das DBDiagnostics.class Datei werden in dem Verzeichnis, von dem aus Sie starten von Java? Wenn nicht, wird der class loader nicht finden.
Macht die DBDiagnostics Klasse haben ein Paket? Wenn es das tut, müssen Sie beziehen sich auf die vollkommen aufgelöst Klasse Namen, und die Wurzel der Paket-Hierarchie soll im Verzeichnis, von dem aus Sie starten von Java.
Mike Sickler ' s Antwort sieht die Rechte für einen Windows-Plattform. Der Pfad-separator für Windows ist "; " aber ":" für Unix und Linux, so stellen Sie sicher, dass Sie immer das richtige!
Lange gedreht, aber dieser Unix oder Windows? Wenn unter Windows die class-path-separator sollte ein semi-Kolon:-
Und natürlich müssen Sie die ojdbc6.jar Datei in das aktuelle Verzeichnis, wenn Sie nicht geben Sie einen beliebigen Pfad. (Und eventuell die Abhängigkeiten als auch...)