2010-01-15 5 views
3

Java에 처음 오 셨습니다. 샘플 앱을 실행하려고합니다. 문제와 관련이있는 코드 섹션을 포함합니다. 필요한 경우 전체 테스트 앱을 게시 할 수 있습니다. Ijavac 컴파일 오류 - "... 추상화 할 수 없습니다."

응용 프로그램이 실행되는 htmlunit lib/test를 통해 응용 프로그램이 대상 웹 사이트를 구문 분석 할 때 생성되는 css 경고를 처리하기 위해 오류 처리기를 구현하려고합니다.

ErrorHandler를 호출하기 위해 MycssErrorHandler 클래스를 구현하는 방법을 정확히 모르겠습니다. 또한 정확히 코드/테스트 클래스의 본체에서 개체를 인스턴스화하는 방법을 잘 모르겠습니다.

생각/의견/코드 덩어리

감사합니다 .. 도움이 될 것입니다! 나는 다음과 같은 오류를 받고 있어요

내가 컴파일 할 때 :

[[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 

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

테스트 코드 청크는 다음과 같습니다

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

(어쨌든 추상적으로 MycssErrorHandler을 선언해야 할 이유는 무엇입니까? 당신은 인터페이스 :)를 사용하여 구체적인 클래스를 구현하는 거 야). 아마도 Core Java와 같은 Java에 관한 좋은 책을 읽어야합니다. – SLaks

+0

안녕하세요 ... 답변 주셔서 감사합니다 .... 나는 행운과 함께 이것을 처리하려고하는 수많은 스레드를 보았습니다! 그래서 내가해야 할 일은 본질적으로 다른 메소드를 오버라이드하는 더미 스텁을 생성하는 것입니다. 감사합니다. –

답변

3

귀하의 MycssErrorHandler 클래스를 사용하면 직접 사용할 수 없다는 것을 의미 abstract입니다 .

abstract 클래스는 인스턴스화 할 수 없습니다. 그것은에서 상속 될 수 있습니다.

abstract 키워드를 클래스 정의에서 제거해야합니다.

abstract 키워드를 제거한 후에는 ErrorHandler 인터페이스에서 세 가지 방법 모두를 구현하도록 클래스를 설정해야합니다. (error, 및 warning)

1

오류가 발생하면 MycssErrorHandler를 추상으로 선언했습니다. 추상적 인 클래스는 만들 수 없습니다. abstract 키워드를 제거하거나 MycssErrorHandler에서 파생 된 추가 클래스를 구현해야합니다.

당신은 당신의 질문에 대한 답변을 받아 들여야

+0

그는 완전히 인터페이스를 구현하지 않았기 때문에 다른 컴파일러 오류를 제거하기 위해 추상적으로 만들었습니다. 내 대답을 보라. – SLaks

+1

예. 그 수치. 인터페이스에 필요한 모든 것이 구현되지 않은 한, 그 클래스를 인스턴스화 할 수 없습니다. – futureelite7

관련 문제