Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > java.lang.NoClassDefFoundError


Автор: PokeMon 21.9.2007, 19:08
Все время при запуске (java kernel) выдается сообщение 
Код

Exception in thread "main" java.lang.NoClassDefFoundError: kernel



вот исходник


Код

import java.net.*;
import java.io.*;
import java.sql.*;
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.sql.ResultSet;
public class kernel{
    static Connection con;
    static Statement stmt;
    
    static void connect()  {
        try {
            String conString = "jbdc:mysql://localhost:3306/tablce?user=root&password=root";
            //System.out.println("Connecting with " + conString);
            con = DriverManager.getConnection(conString);
            con.setAutoCommit(true);
            stmt = con.createStatement();
        
        } catch (SQLException ex) {
            // handle any errors
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
            ex.printStackTrace(); 
            System.exit(1);
        }
    }

    public boolean execute(String query) throws SQLException {
        try {
            return _execute(query);
        } catch (SQLException exc) {
            // Try again after reconnecting to the DB.
            connect();
            return _execute(query);
        }
    }

    private boolean _execute(String query) throws SQLException {
        return stmt.execute(query);
    }

    public static ResultSet executeQuery(String query) throws SQLException {
        try {
            return _executeQuery(query);
        } catch (SQLException exc) {
            // Try again after reconnecting to the DB.
            connect();
            return _executeQuery(query);
        }
    }

    private static ResultSet _executeQuery(String query) throws SQLException {
        return stmt.executeQuery(query);
    }

    static void initDriver() {
         try {
            // The newInstance() call is a work around for some
            // broken Java implementations

            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (Exception cnfe) 

        { 
            System.out.println("Driver introuvable : "); 
            cnfe.printStackTrace(); 
        } 

    }

    public static void main(String[] args){
    
        initDriver();
        connect();

        ResultSet rs;
  
        try{
         /******** РБТБНЕФТЩ РПДЛМАЮЕОЙС ********/
           // ОПНЕТ ФПЮЛЙ e-port
           long point = 100000;
           // ОПНЕТ ЛБТФЩ e-port
           String card = "00000-00000";
           // РЙО-ЛПД ЛБТФЩ e-port
           String pin = "0000000000";
           rs = executeQuery("SELECT * FROM _service WHERE status='I'");
            while(rs.next()) {
                /******** ЙУИПДОЩЕ ДБООЩЕ ЪБРТПУБ ПРЕТБГЙЙ ********/
             // ФЙР ЪБРТПУБ (OPERATION/CONFIRM/CANCEL)
               String req_type = rs.getString("type");      
               // ЙДЕОФЙЖЙЛБФПТ ПРЕТБГЙЙ
               String req_id = rs.getString("id");
               // ОПНЕТ ЮЕЛБ
               String req_checkid = rs.getString("id");
               // БТФЙЛХМ ФПЧБТБ ЙЪ УРТБЧПЮОЙЛБ(Ч ДБООПН УМХЮБЕ - нфу ESPP)
               long req_product = rs.getInt("product");
               // ПВЯЕН УДЕМЛЙ (Ч ДБООПН УМХЮБЕ - 100 ТХВМЕК)
               String req_value = rs.getString("value")+"RUR";
               // ТЕЛЧЙЪЙФЩ М/У ЛМЙЕОФБ, ПВЯЕДЙОЕООЩЕ ФПЮЛПК У ЪБРСФПК
               // Ч ДБООПН УМХЮБЕ ТБЛХЙЪЙФ ПДЙО - ОПНЕТ ФЕМЕЖПОБ
               String req_account = rs.getString("account");
               // ФБКН-БХФ ЪБРТПУБ Ч УЙОИТПООПН ТЕЦЙНЕ
               long req_timeout = 15;   
               // ТЕЦЙН ФТБОЪБЛГЙЙ (0 - ПДОПЖБЪОЩК, 1 - ДЧХИЖБЪОЩК)
               long req_cnfmode = 1;   
        
               /******** жПТНЙТПЧБОЙЕ ЪБРТПУБ text/plain ********/
               String CRLF = "\r\n";
               String request = req_type  + CRLF + 
                 "id="      + req_id      + CRLF + 
                 "checkid=" + req_checkid + CRLF + 
                 "product=" + req_product + CRLF + 
                 "value="   + req_value   + CRLF + 
                 "account=" + req_account + CRLF + 
                  "timeout=" + req_timeout + CRLF + 
                 "cnfmode=" + req_cnfmode + CRLF;
        
//              System.out.println("=== Operation Request ===");
//              System.out.println(authHeader);
       
             /******** ХУФБОБЧМЙЧБЕН HTTPS - УПЕДЙОЕОЙЕ  ********/
               URL url = new URL("https://dealer.e-port.ru/cp/fe");
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
               conn.setUseCaches(false);
               conn.setDoInput(true);
               conn.setDoOutput(true);
      
               // ДПВБЧМСЕН ЪБЗПМПЧПЛ БХФЕОФЙЖЙЛБГЙЙ
               String authHeader = "point="+point+"; card=\""+card+"\"; pin=\"" + pin+"\"";
               conn.addRequestProperty("X-Eport-Auth",authHeader);
               System.out.println(authHeader);

               // ХУФБОБЧМЧБЕН РТЙЪОБЛ УЙОИТПООПЗП ТЕЦЙНБ
               conn.addRequestProperty("X-Eport-Mode","1");
      
               // ХЛБЪЩЧБЕН ЛПДЙТПЧЛХ УППВЭЕОЙС Й ЖПТНБФ ДБООЩИ
               String srvCharset = "windows-1251";
               String ctypeHeader = "text/plain; charset="+ srvCharset;
               conn.addRequestProperty("Content-Type",ctypeHeader);
    
               /******** ПФРТБЧМСЕН ЪБРТПУ ОБ УЕТЧЕТ ********/
               // РТЕПВТБЪХЕН ЪБРТПУ Ч ДБООЩЕ Ч УППФЧЕФУФЧХАЭЕК ЛПДЙТПЧЛЕ 
               byte[] data  = request.getBytes("windows-1251");
               conn.addRequestProperty("Content-length",""+data.length+"");

               OutputStream os = conn.getOutputStream();
               os.write(data, 0, data.length);
               os.close();

               /******** ПВТБВБФЩЧБЕН ПФЧЕФ УЕТЧЕТБ ********/
               InputStreamReader ir;
               BufferedReader br;
               String line;
    
               // http-ЛПД ПФЧЕФБ ХЛБЪЩЧБЕФ ОБ ПЫЙВЛХ
               if(conn.getResponseCode()  != HttpURLConnection.HTTP_OK){
                 // Ч УМХЮБЕ ПЫЙВЛЙ ЮЙФБЕН ФЕЛУФ У ЛПННЕОФБТЙЕН
                 System.err.println("HTTP ERROR " + conn.getResponseCode());
                 System.err.println(conn.getResponseMessage());
                 ir = new InputStreamReader(conn.getErrorStream());
                 br = new BufferedReader(ir);
                 while((line = br.readLine()) != null) System.err.println(line);
                 br.close();
        
                   // http-ЛПД ПФЧЕФБ 200
               }else{
                   // ЮЙФБЕН ДБООЩЕ РПУФТПЮОП Й УТБЪХ ЦЕ ТБЪВЙТБЕН
                 // (Ч УЙОИТПООПН ТЕЦЙНЕ РТЙУХФУФЧХЕФ ФПМШЛП ПФЧЕФ РП ПРЕТБГЙЙ)
                 ir = new InputStreamReader(conn.getInputStream(),srvCharset);
                 br = new BufferedReader(ir);
      
                 // ПФЧЕФ РП ПРЕТБГЙЙ ДПМЦЕО ОБЮЙОБФШУС У ЛМАЮЕЧПЗП УМПЧБ "RESULT"
                 line = br.readLine();
                 if(!line.equals("RESULT")) 
                  throw new Exception("Response: Bad format, RESULT required");
        
                 // ЪБФЕН УМЕДХАФ ПВСЪБФЕМШОЩЕ РБТБНЕФТЩ ПФЧЕФБ Ч ПРТЕДЕМЕООПН РПТСДЛЕ
                 String res_id;   // ЙДЕОФЙЖЙЛБФПТ ПРЕТБГЙЙ
                 long   res_code; // ЛПД ПФЧЕФБ
                 String res_omsg; // УППВЭЕОЙЕ ДМС ТБЪТБВПФЮЙЛБ/ПРЕТБФПТБ УЙУФЕНЩ
                 String res_cmsg; // УППВЭЕОЙЕ ДМС ЛМЙЕОФБ
        
                 line = br.readLine();
                 if(line == null || ! line.startsWith("id=")) 
                     throw new Exception("Response: Bad format, id required");
                 res_id = line.substring(3);
        
                 line = br.readLine();
                    if(line == null || ! line.startsWith("code=")) 
                      throw new Exception("Response: Bad format, code required");
                    res_code = Long.parseLong(line.substring(5));
                    
                    line = br.readLine();
                    if(line == null || ! line.startsWith("omsg=")) 
                      throw new Exception("Response: Bad format, omsg required");
                    res_omsg = line.substring(5);
                    
                 line = br.readLine();
                 if(line == null || ! line.startsWith("cmsg=")) 
                      throw new Exception("Response: Bad format, cmsg required");
                    res_cmsg = line.substring(5);
                    
                    // ДБМЕЕ УМЕДХАФ ОЕПВСЪБФЕМШОЩЕ РБТБНЕФТЩ ПРЕТБГЙЙ
                    String res_time = null; // ДБФБ/ЧТЕНС ПРЕТБГЙЙ ОБ УЕТЧЕТЕ
                    String res_pmsg = null; // УППВЭЕОЙЕ ДМС РЕЮБФЙ
                    String res_card = null; // ОПНЕТ ЛБТФЩ e-port ЛМЙЕОФБ
                    String res_pin = null;  // РЙО-ЛПД ЛБТФЩ e-port ЛМЙЕОФБ
                    
                    while( (line = br.readLine()) != null){
                      if(line.startsWith("time=")){
                        res_time = line.substring(5);
                      }else if(line.startsWith("pmsg=")){
                        res_pmsg = line.substring(5);
                      }else if(line.startsWith("card=")){
                        res_card = line.substring(5);
                      }else if(line.startsWith("pin=")){
                        res_pin = line.substring(4);
                      }else{
                        throw new Exception("Response: Bad format");
                      }
                    }
                    br.close();
                      
                    // ПВТБВБФЩЧБЕН РПМХЮЕООЩЕ ДБООЩЕ
                    System.out.println("=== Operation result ===");
                    System.out.println("id   :" + res_id);
                    System.out.println("code :" + res_code);
                    System.out.println("omsg :" + res_omsg);
                    System.out.println("cmsg :" + res_cmsg);
                    System.out.println("time :" + res_time);
                    System.out.println("pmsg :" + res_pmsg);
                    System.out.println("card :" + res_card);
                    System.out.println("pin  :" + res_pin);
                  }

                }
         }catch(Exception ex){
               System.err.println(ex);
               ex.printStackTrace();
     }
    }  
}




уже незнаю что делать и как обойти баг
а при запуске 
java -cp . kernel
выдает
SQLException: No suitable driver
SQLState: 08001
VendorError: 0
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:532)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at kernel.connect(kernel.java:18)
        at kernel.main(kernel.java:78)




Автор: Maksym 21.9.2007, 19:36
PokeMon
А .jar с драйвером ты положил в classpath?

Автор: chief39 21.9.2007, 19:56
Цитата(PokeMon @  21.9.2007,  19:08 Найти цитируемый пост)
java -cp . kernel

Вот так правильно.
Текущая директория по дефолту не лежит в класспасе. (Лучше в системной переменной CLASSPATH добавить ".").
Кстати, имена классов - с большой буквы, это важно и общепринято (Kernel).

Этот запуск находт твой класс, но не находит библиотеку mysql.
Если у тебя есть этот <mysql>.jar - перечисли его в -cp наряду с точкой. Если нет - скачай(достань smile ), сложи недалеко и перечилси путь к нему в том же -cp smile

Драйвера для различных БД не присутсвуют в JVM и их нужно укладывать в класспас, иначе как будут работать эти строчки:
Цитата

con = DriverManager.getConnection(conString);
            con.setAutoCommit(true);
            stmt = con.createStatement();

        

Цитата(PokeMon @  21.9.2007,  19:08 Найти цитируемый пост)
String conString = "jbdc:mysql://localhost:3306/tablce?user=root&password=root";

Помечено чёрным то место, где ты выбираешь драйвер. В данном случае - mysql. Тебе, соответственно, нужен этот драйвер и всё остальное, ему причитающееся. Это всё лежит в Jar'е mysql. 
Например http://dev.mysql.com/downloads/connector/j/5.0.html

Автор: PokeMon 21.9.2007, 20:57
н вот что получилось  java -cp . -cp /usr/local/share/java/classes/mysql-connector-java.jar Kernel

и получил 

Exception in thread "main" java.lang.NoClassDefFoundError: Kernel


что дальше? или что то я не понял? 

Автор: Maksym 21.9.2007, 21:06
PokeMon
Ты сам-то класс в Kernel переименовал?

Автор: PokeMon 21.9.2007, 21:11
канешно =) я пнимаю что в джаве я нуб но всеж

Автор: Maksym 21.9.2007, 21:49
PokeMon
О, только заметил, а зачем два раза -cp? 
Попробуй java -cp .;/usr/local/share/java/classes/mysql-connector-java.jar Kernel

Автор: PokeMon 21.9.2007, 22:18
вт ответ 
Код

]$ java -cp .;/usr/local/share/java/classes/mysql-connector-java.jar Kernel
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

where options include:
    -client       to select the "client" VM
    -server       to select the "server" VM
    -hotspot      is a synonym for the "client" VM  [deprecated]
                  The default VM is client.

    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose[:class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -showversion  print product version and continue
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
-bash: /usr/local/share/java/classes/mysql-connector-java.jar: Permission denied


а во так
java -cp ".;/usr/local/share/java/classes/mysql-connector-java.jar" Kernel


Exception in thread "main" java.lang.NoClassDefFoundError: Kernel

Автор: Maksym 21.9.2007, 22:33
PokeMon
java не находит класса Kernel в classpath
Скопируй его в jdk_home/bin и выполни там java Kernel. Интересно, тоже ругнется..?

Автор: PokeMon 21.9.2007, 22:42
выдало 
SQLException: No suitable driver
SQLState: 08001
VendorError: 0
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:532)
        at java.sql.DriverManager.getConnection(DriverManager.java:193)
        at Kernel.connect(Kernel.java:18)
        at Kernel.main(Kernel.java:78)

Добавлено через 3 минуты и 42 секунды
может я чтото делаю не так? jdk_home/bin это случайно не /usr/local/jdk1.4.2/bin ? да кстатисистема FreeBSD 5.4

Добавлено через 4 минуты и 57 секунд
да и эксепшен на Class.forName("com.mysql.jdbc.Driver").newInstance(); не срабатывает этож знит что драйвер подгрузился?

Автор: dorogoyIV 22.9.2007, 03:42
а ты указал "package ..." ?

Автор: PokeMon 22.9.2007, 11:07
ммм я нуб в этих делах мжете пояснить*?

Автор: zera 22.9.2007, 11:33
в линуксе разделитель в classpath - :

Автор: PokeMon 22.9.2007, 11:57
дык всеравно 

SQLException: No suitable driver
SQLState: 08001
VendorError: 0
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:532)
        at java.sql.DriverManager.getConnection(DriverManager.java:193)
        at Kernel.connect(Kernel.java:18)
        at Kernel.main(Kernel.java:78)

Автор: LSD 22.9.2007, 12:46
Попробуй так:
Код
Driver driver = (Driver) Class.forName("com.mysql.jdbc.Driver").newInstance();
DriverManager.registerDriver(driver);

Автор: PokeMon 22.9.2007, 14:12
 smile не помогло =(. тоже само выдает.

Автор: LSD 22.9.2007, 14:27
Еще какие нибудь ошибки в консоль пишутся?

Автор: PokeMon 22.9.2007, 14:31
неа. mysql-connector-java-5.0.7-bin.jar  лежит в тойже директории

java -cp .:./mysql-connector-java-5.0.7-bin.jar Kernel
SQLException: No suitable driver
SQLState: 08001
VendorError: 0
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:532)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at Kernel.connect(Kernel.java:18)
        at Kernel.main(Kernel.java:81)


все потом выход из программы. 
но посути драйвер же подклчился. может мне обновить систему и тп?

Автор: LSD 22.9.2007, 14:43
Проверь еще одну вещь:
Код

Driver driver = (Driver) Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Accept URL = " + driver.acceptsURL("jbdc:mysql://localhost:3306/tablce?user=root&password=root"));

Автор: PokeMon 22.9.2007, 15:08
вот что выдало

Accept URL = false
SQLException: No suitable driver
SQLState: 08001
VendorError: 0
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:532)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at Kernel.connect(Kernel.java:19)
        at Kernel.main(Kernel.java:86)

Автор: LSD 22.9.2007, 17:22
У тебя ошибка в URL: jbdc:... а должно быть jdbc:...

Автор: PokeMon 22.9.2007, 19:19
блин гениально=) работает =)) спасибо огромное =)

Автор: PokeMon 22.9.2007, 21:24
МММ все работает но при парсинге страницы и вывода на экран русский текст выглядит как ????

Автор: LSD 23.9.2007, 15:19
Поставь вывод полученных данных в файл, и посмотри будут ли там нормально отображаться русские буквы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)