2010-01-15 7 views
3

Nouveau sur java ... Essayer d'obtenir un exemple d'application à exécuter. J'inclus la section de code qui semble être pertinente à la question. Je peux poster toute l'application de test si nécessaire. J'essaye d'implémenter le errorhandler pour gérer les avertissements css qui sont générés lorsque l'application analyse des sites Web ciblés via le test/test htmlunit que l'application exécute.javac erreur de compilation - "... abstrait, ne peut pas être instancié"

Je ne suis pas sûr exactement comment la classe MycssErrorHandler devrait être implémentée afin d'appeler le ErrorHandler. Je ne sais pas exactement comment instancier l'objet dans le corps principal de la classe de code/test.

morceaux Pensées/Commentaires/code serait utile ..

Merci!

Je reçois l'erreur suivante quand je compilez:

[[email protected] 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 

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

Le morceau de code de test est:

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); 
+4

Vous devez accepter les réponses à vos questions. Vous devriez probablement aussi lire un bon livre sur Java, comme Core Java. – SLaks

+0

Salut ... Merci pour la réponse .... J'ai regardé de nombreuses discussions en essayant de faire face à cela sans chance! Donc tout ce que j'ai à faire, est essentiellement de créer des bouts factices pour outrepasser les autres méthodes. merci .. –

Répondre

3

Votre classe MycssErrorHandler est abstract, ce qui signifie que vous ne pouvez pas l'utiliser directement . Une classe abstract ne peut pas être instanciée; il ne peut être hérité que de.

Vous devez supprimer le mot-clé abstract de la définition de classe. Une fois que vous avez supprimé le mot-clé abstract, vous devez également implémenter la classe dans les trois méthodes de l'interface ErrorHandler. (error, fatalError et warning)

1

Comme l'erreur l'indique, vous avez déclaré MycssErrorHandler comme abstrait. Vous ne pouvez pas créer une classe abstraite. Vous devrez supprimer le mot clé abstract ou implémenter une classe supplémentaire dérivée de MycssErrorHandler.

(Pourquoi avez-vous besoin de déclarer MycssErrorHandler comme abstraite de toute façon? Vous êtes censé mettre en œuvre une classe concrète en utilisant l'interface :))

+0

Il l'a rendu abstrait pour enlever l'autre erreur du compilateur, car il n'a pas implémenté complètement l'interface. Vois ma réponse. – SLaks

+1

Oui .. que les chiffres. Vous ne pouvez pas instancier cette classe à moins que tout ce qui est requis par l'interface soit implémenté. – futureelite7

Questions connexes