2013-02-19 2 views
1

У меня есть программа, которая очищает ссылки от веб-страницы, а затем проверяет, работает ли ссылка или не работает. Один бит, с которым у меня возникли проблемы, - убедиться, что URL-адрес действительно действителен.Проверка правильного URL-адреса, построение URI

Эти ссылки предназначены только для того, чтобы сайт работал правильно с точки зрения конечного пользователя. Так что в основном протоколы http, https и mailto, я не уверен, есть ли какие-то другие протоколы, которые мы используем как ftp, но я бы хотел иметь возможность обрабатывать все непредвиденные случаи.

До сих пор это мой код для создания URI. До этого я уже Царапины ссылки с других страниц:

private boolean isValidURI(String checkUrl){ 
    boolean validURI = false; 
    checkUrl = "this could be a link for some reason.com"; //set to link you want to test 
    //Decodes checkUrl - Some links may already be encoded. This sets everything to a default of non-encoded urls. 
    try { 
     checkUrl = URLDecoder.decode(checkUrl, "UTF-8"); 
    } catch (UnsupportedEncodingException e1) { 
     e1.printStackTrace(); 
     System.out.println("Error 1: "+checkUrl); 
    } 
    //Encodes checkUrl, allows URLs with various characters. 
    try { 
     url = new URL(checkUrl); 
    } catch (MalformedURLException e2) { 
     e2.printStackTrace(); 
     System.out.println("Error 2: "+checkUrl); 
    } 

    try { 
     uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), url.getRef()); 
     System.out.println(uri); 
     validURI = true; 
    } catch (URISyntaxException e3) { 
     e3.printStackTrace(); 
     System.out.println("Error 3: "+checkUrl); 
    }  

    return validURI; 
} 

Что я борюсь с вот если я ставлю ссылку в без действительного протокола, например, «Это link.com» Я получаю

at java.net.URL.<init>(Unknown Source) 
at java.net.URL.<init>(Unknown Source) 
at java.net.URL.<init>(Unknown Source) 
at xboxtools.PingUrl.isValidURI(PingUrl.java:106) 
at xboxtools.PingUrl.setLinkStatus(PingUrl.java:47) 
at xboxtools.PingUrl.<init>(PingUrl.java:28) 
at xboxtools.LocaleTab.runLocaleActionPerformed(LocaleTab.java:179) 
at xboxtools.LocaleTab$1$1.run(LocaleTab.java:71) 
at java.lang.Thread.run(Unknown Source) 
Exception in thread "Thread-2" java.lang.NullPointerException 
at xboxtools.PingUrl.isValidURI(PingUrl.java:113) 
at xboxtools.PingUrl.setLinkStatus(PingUrl.java:47) 
at xboxtools.PingUrl.<init>(PingUrl.java:28) 
at xboxtools.LocaleTab.runLocaleActionPerformed(LocaleTab.java:179) 
at xboxtools.LocaleTab$1$1.run(LocaleTab.java:71) 
at java.lang.Thread.run(Unknown Source) 

В основном то, что я хочу сделать, это проверить, если связь я скрести действительную ссылку. Если это не так, установите для validURI значение false, а затем перейдите к следующей ссылке.

Любая помощь в предложениях, что я мог бы сделать, чтобы улучшить это?

+0

'isValidURI (PingUrl.java:113)', который является строкой 113 – Abubakkar

ответ

2

вы получаете NPE, потому что вы поймаете исключение (MalformedURLException) , а затем приступите к большему количеству кода, как будто ничего не произошло.

Ваш вопрос не имеет никакого отношения к проверке URL, просто отладка. когда вы сталкиваетесь с ситуациями, которые вы не понимаете, сначала попробуйте выполнить свой код с помощью достойного отладчика.

+0

Я установил логическое validURI = true, только когда получаю действительный URL. Если это неверно, я ничего не делаю с этим URL. Я знаю, почему он бросает MalformedURLException. Итак, что вы говорите, это если он выдает ошибку, даже если я ничего не делаю с кодом, который мне нужно каким-то образом обработать? Извините, я к этому отношусь. – Peck3277

+0

Черт возьми, я не понял, как думал. Я не делал ничего с ошибкой, создавая этот url = новый URL (checkUrl) ;. Теперь я проверил ошибку, прежде чем пытаться создать uri. Надеюсь, это должно смягчить все проблемы, которые у меня есть. благодаря – Peck3277

Смежные вопросы