
以下のコードを実行するとこのようなエラーが出てしまいます。エラー
を出さずにhtmlをパースしたいのですがどうすればよいでしょうか?
(httpが勝手にリンクされてしまうのでhを&x68;にしてあります)
置換してください。
java.lang.NullPointerException
at ParserTest$MyCallBack.handleText(ParserTest.java:78)
at javax.swing.text.html.parser.DocumentParser.handleText(Unknown Source)
at javax.swing.text.html.parser.Parser.handleText(Unknown Source)
at javax.swing.text.html.parser.Parser.endTag(Unknown Source)
at javax.swing.text.html.parser.Parser.parseTag(Unknown Source)
at javax.swing.text.html.parser.Parser.parseContent(Unknown Source)
at javax.swing.text.html.parser.Parser.parse(Unknown Source)
at javax.swing.text.html.parser.DocumentParser.parse(Unknown Source)
at javax.swing.text.html.parser.ParserDelegator.parse(Unknown Source)
at ParserTest.<init>(ParserTest.java:51)
at ParserTest.main(ParserTest.java:31)
以下ソース:
import java.io.*;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.parser.ParserDelegator;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.HTML;
import java.net.Socket;
import java.net.URL;
import java.net.SocketTimeoutException;
import java.io.*;
import java.nio.channels.*;
import java.util.Hashtable;
import java.util.Enumeration;
import java.util.regex.*;
import java.lang.StringBuffer;
import java.lang.Integer;
import java.lang.Math;
public class ParserTest{
/**
* 引数でHTMLファイルを指定
*/
public static void main(String[] args) throws IOException, FileNotFoundException{
new ParserTest(new URL("http://allabout.co.jp/internet/java/closeup/CU20060503A/index3.htm"),80);
}
public ParserTest(URL url,int mPort)throws IOException, FileNotFoundException{
Socket TSock = new Socket(url.getHost(), mPort);
TSock.setSoTimeout(3000);
BufferedWriter SockOut = new BufferedWriter(new OutputStreamWriter(TSock.getOutputStream()));
SockOut.write("GET " + url.getPath() + " HTTP/1.1\r\n");
SockOut.write("Host: " + url.getHost() + "\r\n");
SockOut.write("Connection: close\r\n\r\n");
SockOut.flush();
InputStream IS = TSock.getInputStream();
InputStreamReader ScISR = new InputStreamReader( IS );
ParserDelegator parser = new ParserDelegator();
MyCallBack mycallback = new MyCallBack();
parser.parse(ScISR, mycallback, true);
Enumeration e = mycallback.hrefs.keys();
while (e.hasMoreElements()){
String buff =new String((String)e.nextElement());
String Temp;
if(mycallback.hrefs.get(buff ).equals("小沢氏、民主公約修正に異議") ){
if(!buff.substring(0,6).equals("http://")){
Temp = "http://" + url.getHost() + buff;
}
System.out.println(buff + mycallback.hrefs.get(buff ) );
}
}
}
private static class MyCallBack extends HTMLEditorKit.ParserCallback{
public Hashtable<String,String> hrefs = new Hashtable<String,String>();
boolean f = false; String href="";
public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos){
if (t.equals(HTML.Tag.A)){
href = (String)a.getAttribute(HTML.Attribute.HREF);
}
}
public void handleText(char[] data, int pos){
if(href.length() != 0){
//System.out.println(href);
hrefs.put(href, new String(data));
//System.out.println(new String(data));
}
}
public void handleEndTag(HTML.Tag t, int pos){
if (t.equals(HTML.Tag.TD)){
href = "";
}
}
}
}
No.1ベストアンサー
- 回答日時:
>java.lang.NullPointerException
>at ParserTest$MyCallBack.handleText(ParserTest.java:78)
って出てるんだから、MyCallBackクラスのhandleTextメソッド(ファイルParserTest.javaの78行目)でnull値参照してるんでしょ。
だったらnullかどうか判定してから処理すればいいだけじゃない?
httpがリンクになるからって、全部の「h」を置換したんじゃぁ、読みにくくてかなわん。
ありがとうございます。
私エラーメッセージの見方が良くわかってませんでした。
そんな簡単な事だったのですね。nullかどうか確認するifを
入れたら回避する事ができました。
置換の件はすみませんでした。読みづらいコードを読んで
いただいてありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
干支の計算で。。。
-
「1」などの数字を「January」...
-
javaの課題でコンパイルエラー...
-
setAttribute(String, int)は適...
-
アプレットの動作テストができない
-
<forEach> 内で供給された "ite...
-
main()メソッドが無いコード
-
何故かNoFoundClassExceptionに...
-
画像の位置指定の数字を変えて...
-
SampleCanvasのシンボルが見つ...
-
地図/位置情報/GPSを使うAndroi...
-
ParserDelegator.parse(Unknown...
-
Timer schedule
-
どうしてもプログラムが動いて...
-
SWINGでアプレット使えますか?
-
サンプルプログラムでコンパイ...
-
Java Applet での虫食い算での質問
-
Selenium IDEでexportしたコー...
-
「例外 *** は対応する try 文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
<forEach> 内で供給された "ite...
-
干支の計算で。。。
-
importするには java.io.*; imp...
-
Javaを使ってデジタル時計を作...
-
シャットダウンフックが呼ばれない
-
setAttribute(String, int)は適...
-
Selenium IDEでexportしたコー...
-
JAVA 乱数で同じ数字を出さな...
-
文字列を数式に
-
Java での グローバルIP取得
-
importとextendsの用い方の違い...
-
文字サイズが可変のラベル
-
ColabでのPytorchのエラー
-
Swingなしで画像ファイルロード
-
ActionForm form にnullが入っ...
-
GridBagLayoutについての質問
-
ファイル名を動的に生成したい
-
Xercesを使ったjavaでのXML解析
おすすめ情報