2011-04-21 5 views
0

이 코드를 올바르게 작동시키는 방법을 알아낼 수 없습니다. 내가 뭔가 잘못하고 있는거야? 프로그램은 Record []에서 실패합니다. records = lookup.run(); 선.Java DNS API가 작동하지 않습니다.

import java.util.Iterator; 

    import org.xbill.DNS.ARecord; 
    import org.xbill.DNS.Lookup; 
    import org.xbill.DNS.Record; 
    import org.xbill.DNS.TXTRecord; 
    import org.xbill.DNS.TextParseException; 
    import org.xbill.DNS.Type; 
    Lookup lookup; 
    try { 
     lookup = new Lookup("google.com", Type.ANY); 
     Record[] records = lookup.run(); 

     if (lookup.getResult() == Lookup.SUCCESSFUL) { 
      String responseMessage = null; 
      String listingType = null; 
      for (int i = 0; i < records.length; i++) { 
       if (records[i] instanceof TXTRecord) { 
        TXTRecord txt = (TXTRecord) records[i]; 

        for (Iterator j = txt.getStrings().iterator(); j.hasNext();) { 
         responseMessage += (String) j.next(); 
        } 
       } else if (records[i] instanceof ARecord) { 
        listingType = ((ARecord) records[i]).getAddress() 
          .getHostAddress(); 
       } 
      } 
     } 
    }catch (TextParseException e) { 
     e.printStackTrace(); 
    } 
+1

, 너무 스택 추적을 게시 할 수 있습니다. –

답변

1

무슨 뜻입니까? 이전에 요청한 예외 추적을 붙여 넣으십시오. 코드를 잘 실행할 수 있었고 결과를보기 위해 레코드에 출력을 추가했습니다. 여기에 코드입니다 :

import java.util.Iterator; 
import org.xbill.DNS.ARecord; 
import org.xbill.DNS.Lookup; 
import org.xbill.DNS.Record; 
import org.xbill.DNS.TXTRecord; 
import org.xbill.DNS.TextParseException; 
import org.xbill.DNS.Type; 

public class DNS { 

    public static void main(String[] args) { 
     try { 
      Lookup lookup = new Lookup("google.com", Type.ANY); 
      Record[] records = lookup.run(); 

      if (lookup.getResult() == Lookup.SUCCESSFUL) { 
       String responseMessage = null; 
       String listingType = null; 
       for (int i = 0; i < records.length; i++) { 
        if (records[i] instanceof TXTRecord) { 
         TXTRecord txt = (TXTRecord) records[i]; 
         for (Iterator j = txt.getStrings().iterator(); j 
           .hasNext();) { 
          responseMessage += (String) j.next(); 
         } 
         System.out.println("TXRecord " + responseMessage); 
        } else if (records[i] instanceof ARecord) { 
         listingType = ((ARecord) records[i]).getAddress() 
           .getHostAddress(); 
         System.out.println("ARecord address : " + listingType); 
        } 
       } 
      } 
     } catch (TextParseException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

그리고 여기에 출력됩니다 :

는 스택 추적을 인쇄하여 실패하면
ARecord address : 74.125.224.49 
ARecord address : 74.125.224.51 
ARecord address : 74.125.224.52 
ARecord address : 74.125.224.48 
ARecord address : 74.125.224.50 
TXRecord nullv=spf1 include:_netblocks.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all 
+0

OP와 동일한 코드가 작동하지 않지만 작동하는 경우 OP 시스템의 네트워크 구성 문제 일 수 있습니다. 이 기능을 사용하려면 인터넷 연결이 필요합니다. – gnomed

+0

그래,하지만 그 경우에 그는 예외를 가져야한다 .. – lobster1234

+0

나는 이클립스 내부에서 이걸 운영하고있다. 레코드 Record [] records = lookup.run(); null를 돌려줍니다. 인터넷에 연결되어있어 문제가 아님을 알고 있습니다. 어떤 버전의 dnsjava를 사용하고 있습니까? 아니면 네트워크 구성 문제입니까? 스택 추적이 인쇄되지 않으면 첫 번째 if 문을 지나치지 않습니다. 첫 번째 if 문을 주석 처리하면 null 포인터 예외가 발생합니다. – David

관련 문제