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


Автор: SuperOrange 8.1.2010, 18:30
имею код
Код

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.io.FileWriter;
import java.net.URL;
import java.net.URLConnection;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
public class readHTML
{
    public static void main(String[] args)
    {
        try
        {
            Timer timer = new java.util.Timer();
            TimerTask timerTask = new TimerTask()
            {
                public void run()
                {
                    try
                    {
                        String companyid = "123456";
                        String datetime = getDateTime();
                        URL url = new URL("http://api.erepublik.com/v1/feeds/companies/" + companyid);
                        URLConnection conn = url.openConnection();
                        SAXBuilder sb = new SAXBuilder(); // тут ошибка
                        Document doc = sb.build(conn.getInputStream());
                        XMLOutputter xo = new XMLOutputter();
                        FileWriter writer = new FileWriter("d:/eRep/" + companyid + "/" + datetime + ".xml");
                        xo.output(doc, writer);
                        writer.close();
                        System.out.println(companyid + " : " + datetime);
                    }
                    catch (Exception e)
                    {
                        System.out.println("error ((");
                        e.printStackTrace();
                    }
                }
            };
            timer.schedule(timerTask, 1000, 1000 * 60 * 10);
        }
        catch (Exception e)
        {
            System.out.println("error ((");
            e.printStackTrace();
        }
    }
    private static String getDateTime()
    {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
        Date date = new Date();
        return dateFormat.format(date);
    }
}

В эклипсе всё нормально запускается и работает, но если из командной строки 
Код

javac -classpath d:\eRep\jdom.jar readHTML.java

билд проходит нормально. но при запуске
Код

java readHTML
или
java -cp "." readHTML

вылетает ошибка
Код

Exception in thread "Timer-0" java.lang.NoClassDefFoundError: org/jdom/input/SAXBuilder
        at HelloWorld$1.run(HelloWorld.java:29)
        at java.util.TimerThread.mainLoop(Unknown Source)
        at java.util.TimerThread.run(Unknown Source)

jdom.jar лежит рядом с java файлом.
подскажите что я нетак делаю ?

Автор: jk1 8.1.2010, 22:02
Если при исполнении java не указать опцию -classpath (-cp), то в качестве classpath будет использоваться ".". Если же опция указана, то умолчание использовано не будет. Укажите в -cp полный путь ко всем нужным jar-файлам и текущую директорию, используя ";" в качестве разделителя - тогда все заработает.
Я, например, запускал так:
Код

java -cp ".;c:\SAI\temp\test\jdom.jar" readHTML

Автор: SuperOrange 11.1.2010, 10:33
Спасибо, действительно полный путь к либе помог. 

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