Ошибка компиляции javac - "... абстрактный; не может быть создан" - PullRequest
3 голосов
/ 15 января 2010

Впервые в Java ... Попытка запустить пример приложения. Я включаю раздел кода, который, кажется, имеет отношение к проблеме. Я могу опубликовать все тестовое приложение, если это необходимо. I

Я пытаюсь реализовать обработчик ошибок для обработки предупреждений css, которые генерируются, когда приложение анализирует целевые веб-сайты с помощью htmlunit lib / test, который запускает приложение.

Я не уверен, как именно класс MycssErrorHandler должен быть реализован для вызова ErrorHandler. Я также не совсем уверен, как создать экземпляр объекта в основном теле класса code / test.

Мысли / Комментарии / Куски кода были бы полезны ..

Спасибо!

Я получаю следующую ошибку при компиляции:

[root@toshiba parseapp2]# javac -Xlint -classpath '/opt/htmlunit/lib/*:/parseapp2/' sjsu_classes.java

warning: [path] bad path element "/opt/htmlunit/lib/xml-apis.jar": no such file or directory
warning: [path] bad path element "/opt/htmlunit/lib/xercesImpl.jar": no such file or directory
warning: [path] bad path element "/opt/htmlunit/lib/serializer.jar": no such file or directory
sjsu_classes.java:92: sjsu_classes.MycssErrorHandler is abstract; cannot be instantiated
        ErrorHandler ierr = new MycssErrorHandler(); 
                        ^
1 error
3 warnings

====================================

Блок кода теста:

import org.w3c.css.sac.ErrorHandler;
    import com.gargoylesoftware.htmlunit.DefaultCssErrorHandler;
import org.xml.sax.SAXParseException;

public class sjsu_classes {

    //==handle the warnings thrown from the js functions..
    public static class MyIncorrectnessListener implements IncorrectnessListener
    {
      @Override
      public void notify(String arg0, Object arg1)
      {
        //System.err.println("Argument : " + arg0.toString() + ", Object : ");
      }
    }     

    //==handle the warnings thrown from the css functions..
//  public static class MycssErrorHandler implements DefaultCssErrorHandler
//  public static class MycssErrorHandler implements ErrorHandler
//  public class MycssErrorHandler implements ErrorHandler
    public abstract class MycssErrorHandler implements ErrorHandler
//  protected class MycssErrorHandler implements ErrorHandler
    {
      //@Override
      public void notify(String arg0, Object arg1)
      {
        //System.err.println("Argument : " + arg0.toString() + ", Object : ");
      }
      //@Override
        public void fatalError(SAXParseException ex)
        {
            //fatals.add(ex);
        }
    } 

    //public static void main(String[] args) throws Exception {
    public void main(String[] args) throws Exception {

        // Create and initialize WebClient object
//     WebClient webClient = new WebClient(BrowserVersion.EXPLORER_7);
       WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);
           //WebClient webClient = new WebClient();

        IncorrectnessListener ilisten = new MyIncorrectnessListener(); 
        ErrorHandler ierr = new MycssErrorHandler(); 
        webClient.setIncorrectnessListener(ilisten); 
        webClient.setCssErrorHandler(ierr); 

Ответы [ 2 ]

3 голосов
/ 15 января 2010

Ваш MycssErrorHandler класс abstract, что означает, что вы не можете использовать его напрямую.

Класс abstract не может быть создан; он может быть унаследован только от.

Вам необходимо удалить ключевое слово abstract из определения класса.

После того, как вы удалите ключевое слово abstract, вам также потребуется, чтобы ваш класс реализовал все три метода в интерфейсе ErrorHandler. (error, fatalError и warning)

1 голос
/ 15 января 2010

Как говорится в сообщении об ошибке, вы объявили MycssErrorHandler абстрактным. Вы не можете создать класс, который является абстрактным. Вам придется либо удалить ключевое слово abstract, либо реализовать дополнительный класс, производный от MycssErrorHandler.

(Почему вы все равно должны объявлять MycssErrorHandler абстрактным? Вы должны реализовать конкретный класс с использованием интерфейса:))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...