• 締切済み

Null判定がきかない

VB2008で,ある特定のウェブページのレイアウトを変更させて表示させる プログラムを作りました。自分のPCでは快調に動くので,別のPCで動かして みたところ,NullReferenceExceptionが発生して止まってしまいます。 しらべてみたところ,ビルドしたPCでは, Dim elemchild as HtmlElement elemchild=xxxx.firstchild Do ~処理~ elemchild=elemchild.NextSibling Loop Until isNothing(elemchild) で,elemchildがNothingになるとちゃんとループを抜けているのですが, もう1台のPCでは,elemchildがNothingになってもループを抜けず, ~処理~のところで,NullReferenceExceptionが発生しているみたいです。 Null判定のところを,whileにしてみたり,elemchild is Nothingと書いて みたり,いろいろ書き換えてみましたが,まったくNothingを拾ってくれず ループを繰り返します。 ~処理~の所全体を,try~catchで囲って,catchでループから抜けさせると NullReferenceExceptionは起きなくなります。 なぜ,ビルドしたPCではうまくNothingの判定ができ,別なPCでは Nothingの判定ができないのでしょうか?まったく分かりません。どなたか お教えください。

みんなの回答

回答No.1

Dim elemchild as HtmlElement elemchild=xxxx.firstchild ←ここ Do ~処理~ elemchild=elemchild.NextSibling Loop Until isNothing(elemchild) 上記の指定箇所ですでにNothingになっている可能性はありませんか? 現在のコードだとDo~Loopの一週目はNothing判定がされません。

fukugoo07
質問者

補足

ありがとうございます。しかし,ご指摘の部分がNothingでないことは確認しています。ビルドしたPCではそもそも例外が発生しません。 挙動的にループの終わり間際に例外が発生しているのは分かりましたので,最初は,elemchild=elemchild.NextSiblingがNothingになっているために例外が発生しているのかと思い,この代入文をNull判定してから行うようにしても例外が止まらず,ならば,Loop文の条件判断でNothingのオブジェクトを参照しているからか?と考え,ループの前にif文でNothing判定を行い,Nothingの場合はフラグを立て,Loop文ではそのフラグで条件判断を行うようにしてみました。 それでも例外が発生するので,そのフラグの値をMessageBoxで表示させてみてみると,Nothingで”1”になるべきところが,”0”のまんまだということが分かり,どうやらNull判定ができていないという結論に至りました。 もちろんビルドしたPCでは,ちゃんと”1”になり,ループを抜けます。ビルドしたPCでも,もう1台のPCでも同じデータを使っています。 なぜ,同じデータで,1台のPCではIsNothing()がtrueになり,もう1台のPCでIsNothing()がFalseになるのか,理解できません!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • try~catch

    php初心者です try~catchをわかりやすく教えてください throw new Exceptionが出現したら、catchまでの処理をしないでとばすとゆうことですか? try~catchを抜けたら、他の処理は普通に実行されるのでしょうか? try~catchのカッコ{で囲む範囲は大きくしたほうがいいでしょうか?(大きく囲むと処理スピードおそくなりますか?) try { throw new Exception('エラーが発生しました');  print "hoge"; } catch (Exception $e) {  echo '例外発生', $e->getMessage(), "\n"; }  print "foo"; よろしくお願いします

    • ベストアンサー
    • PHP
  • XmlReaderのnothing判定方法

    Dim rdr As XmlReader と宣言し 特定の条件が発生した時にrdrの値を入れるという処理を書いています。 ただ、 条件が発生しなかった場合はrdrのインスタンスは生成おらず、 これを判断するのにnothingだと比較出来ませんとエラーになります。 こういったケースの場合どのように判定してやるのでしょうか? 環境はVB2008です。

  • phpの例外処理がエラーをトラップしてくれない。

    以下のように例外処理を記述しした場合、 try{ //ここでエラー } catch (Exception $e){ $ErrorMsg="その他エラー:".$e->getMessage(); } tryの中で、0除算によるエラーが発生してもエラーをトラップして、例外 処理のcatchに飛びません。 どのように記述すればエラーをトラップできるのでしょか?

    • ベストアンサー
    • PHP
  • PDO で try~catch 構文を使う場所は?

    PHP5のPDOはtry~catch構文に対応しているのですが、どのように使えばいいのでしょうか? SQLを発行する度に、もしくはSQLを発行するメソッドの度に、try~catchしなければいけないのでしょうか?とても面倒です。 現時点では、例外が発生した時にする処理といえば、 trigger_error($e->getMessage(), E_USER_ERROR); みたいに、trigger_error するだけです。 であれば、そもそもcatchせずに、uncaught のまま勝手にエラったままに放っておいても問題ないのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Try-catch文(FileInputStream)

    下記コードでエラーが出現して困っています。 fis.close();の部分でコンパイルエラー( 変数 fis は初期化されていない可能性があります。)の結果が返ってきます。 必ず通過するfinallyブロックにclose()処理を記述して、この処理もエラーが発生する可能性があるので、try-catchする必要があると教師が言っていました。 エラーが出現する原因はなぜでしょうか? 回答のほどよろしくお願い致します。 FileInputStream fis; try{ fis = new FileInputStream(fi.getAbsolutePath()); while( (b[i++] = fis.read()) != -1); }catch(FileNotFoundException e){ } catch(IOException e){ }finally{ try{ fis.close(); ←コンパイルエラー( 変数 fis は初期化されていない可能性があります。) }catch(IOException e){ } }

    • ベストアンサー
    • Java
  • 困っています。

    こんにちは。 本を使って独学で勉強しているのですが、 例外処理の部分が分かりません。 問題文は、5人の点数を入力(0~100)し0未満かつ100より大きい 値が入力されないかをチェックする。(try_catch) この0未満で100より大きい値が入力されても処理を途中で中断せず 5人分の点数を入力する。 例外処理が発生したときにどうすれば途中で処理を中断せずに実行出来るか というところが分かりません。 どなたかよろしくお願いします。

  • うるう年判定のアルゴリズム

    javaでうるう年判定のプログラムを作成しています。 プログラム自体はサーバにアップするときに実行結果が正しいかどうかテストされます。 仕様としては、 1.時間に関するAPIなどは一切使わずに完全に自作 2.入力される値はLong型の"秒"数(APIで提供されているのはミリ秒ですが) 3.60537895631062456(Long値) などの入力値に対して、年/月/日 (曜日) 時:分:秒 yday=元旦からの経過日数 を出力 最初は以下の関数を使用してループをかけていたのですが、仕様3の入力値に対して50秒近くかかってしまい、上手くいきませんでした。 public static int isLeap(int year){ if(year%4==0 && (year%100!=0 || year%400==0)) return 1; return 0; } 問題点はループ回数が多いことで、作る時点で分かってはいたのですが、ここまで遅くなるとは思っても見ませんでした。 これを使わない方法としては、一回だけうるう年(=n)を見つけ、その後は「(n+4)との比較+100で割り切れず400で割り切れる場合は別」という処理を行うことによって、処理時間を30秒付近にまで短縮することができたのですが、どうも10~15秒以内で終わらせなければテストにパスすることができないようです。 なんとか色々考えてはみたものの、上手いアルゴリズムは思いつきませんでした。 うるう年を処理するための"高速な"アルゴリズムはないのでしょうか。 お知恵を貸してください。よろしくお願いします。

  • うるう年判定のアルゴリズム

    javaでうるう年判定のプログラムを作成しています。 プログラム自体はサーバにアップするときに実行結果が正しいかどうかテストされます。 仕様としては、 1.時間に関するAPIなどは一切使わずに完全に自作 2.入力される値はLong型の"秒"数(APIで提供されているのはミリ秒ですが) 3.60537895631062456L などの入力値に対して、年/月/日 (曜日) 時:分:秒 yday=元旦からの経過日数 を出力 最初は以下の関数を使用してループをかけていたのですが、仕様3の入力値に対して50秒近くかかってしまい、上手くいきませんでした。 public static int isLeap(int year){ if(year%4==0 && (year%100!=0 || year%400==0)) return 1; return 0; } 問題点はループ回数が多いことで、作る時点で分かってはいたのですが、ここまで遅くなるとは思っても見ませんでした。 これを使わない方法としては、一回だけうるう年(=n)を見つけ、その後は「(n+4)との比較+100で割り切れず400で割り切れる場合は別」という処理を行うことによって、処理時間を30秒付近にまで短縮することができたのですが、どうも10~15秒以内で終わらせなければテストにパスすることができないようです。 なんとか色々考えてはみたものの、上手いアルゴリズムは思いつきませんでした。 うるう年を処理するための"高速な"アルゴリズムはないのでしょうか。 お知恵を貸してください。よろしくお願いします。

    • ベストアンサー
    • Java
  • テキストファイルからの読み込みについて

    またまた困っております。 下記の様な場合はどうなるのでしょうか? class Test{ public Static void main(String[] args){   ・  ・ try{ 処理内容A    処理内容B 処理内容C    処理内容D  }catch{ メソッドの呼び出し }   ・   ・   ・ } ------------------------ class Error{ 処理内容Aのcatch定義    処理内容Bのcatch定義 処理内容Cのcatch定義    処理内容Dのcatch定義 } -------------------------- Error.txt 処理内容Aのエラーメッセージ 処理内容Bのエラーメッセージ 処理内容Cのエラーメッセージ 処理内容Dのエラーメッセージ ------------------------------ のように、Testクラス内の処理を別のクラスで行い(Testクラスではその処理のメソッドを呼び出す)、例外内容に付いてもErrorクラスで定義し、エラーの表示内容をError.txtの様な外部ファイルに格納しておいた時に、 Testクラス内で「処理内容B」でエラーが発生した場合、Errorクラスで対応したエラー(処理内容Bのcatch定義)処理を行うのですが、Error.txtから「処理内容Bのエラーメッセージ」を拾い出してくるにはどうしたらよいのですか? 長くなり分かり難いかもしれませんが、宜しくお願い致します。

    • ベストアンサー
    • Java
  • internal server error時の回避

    こんにちは。 いつも勉強させて頂いております。 一点分からない事があり、質問させて頂きました。 一定時間にDBのテーブルを空にしてデータを再登録するバッチ処理を走らせています。 ※ これは、基幹システムが別にあり、そのシステムとの同期を取る為にCSVデータを取得してバッチにて再登録しています。 その際に、トラフィック増大により、internal server errorが発生し途中で処理が止まって しまう事があります。 当然、途中で処理が止まってしまうので、テーブルが空のままになってしまうので、サイト上ではデータが表示されなくなってしまいます。 try-catchで例外処理を記載しているのですが、internal server errorには効かないようです。 何か良い方法はないでしょうか。 何か御分かりになる方、良い案がある方などご教示頂ければ幸いです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
シリコンのリサイクル
このQ&Aのポイント
  • ウェハ切れっぱしや不良チップはリサイクルされているのか
  • シリコンのリサイクルについて知っておきたいこと
  • 資源の有効活用に向けたシリコンリサイクルの取り組み
回答を見る