WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:Javaのコンパイルエラー

0:[投稿] こねこ [2003/01/22 16:36 ][環境:IE6 Tomcat]

現在、JavaでWebアプリをつくっていますが、コンパイル時にVerifyErrorが発生してしまいます。
このエラーの原因は何でしょうか?
解決するにはどうしたら良いかどなたか教えて下さい。



1:[回答] ぱんだ [2003/01/22 16:43 ]

私も一度だけこのエラーが出たことがあります。
javadoc(http://java.sun.com/j2se/1.3/ja/docs/ja/api/index.html)に
あるように論理的矛盾があると思います。

ちなみに私は単純なロジックミスでした^^;
ソースをもう一度見直すことをお勧めします。


2:[質問] こねこ [2003/01/24 14:36 ]

ソースを見直しましたが、ロジックミスが見つかりません。
コンパイル時にVerifyError "Illegal target of jump or branch"が表示されます。
これは、どういうエラーなのでしょうか?


3:[回答] ぱんだ [2003/01/24 16:07 ]

可能でしたらソースを公開してもらえないですか?
もちろんそれで100%回答出来ると言う訳ではありませんが。。
ちょっと情報が少なすぎます。。。

エラーMSGとしては他クラスを呼び出すか、
呼び出し先で何らかの処理をしている場所で
なにかありそうですが・・・


4:[質問] こねこ [2003/01/24 17:49 ]

一つのメソッドの中で行っている処理が、非常に長いので一部のソースを公開させて頂きます。
下のソースのコメントをはずすとVerifyErrorが発生してしまいます。
このエラーの原因がわからず困っているので、何か良い解決策を教えて下さい。

[ソース]
//File Open
String destName  = "sort/" + filename + ".xml";
XMLDocument thedoc2 = (XMLDocument) theStore.getFile(destName);
Document docnode2 = thedoc2.getDOMDocumentNode();
Element docelem2 = docnode2.getDocumentElement();
int prono1[] = new int[1000];
//配列初期化
for (int a = 0; a < prono1.length; a++) {
     prono1[a] = 0;
}
int pro_len = 0;
NodeList leveltwo = docelem2.getChildNodes();
for (int k = 0; k < leveltwo.getLength(); k++) {
    if (leveltwo.item(k).getNodeName().equals("operation_sheet")) {
    OPERATION = (Element) leveltwo.item(k);
       NodeList prolist = OPERATION.getChildNodes();
       pro_len = prolist.getLength();
    for (int m = 0; m < prolist.getLength(); m++) {
         if (prolist.item(m).getNodeName().equals("process")) {
        PROCESS = (Element) prolist.item(m);
               NodeList prolist2 = PROCESS.getChildNodes();
               String getpro = "";
        for (int n = 0; n < prolist2.getLength(); n++) {
                    try {
                        getpro = prolist2.item(0).getChildNodes().item(0).getNodeValue();
             }catch (NullPointerException e) {
                    }
                    prono1[m] = Integer.parseInt(getpro);
            }
         }
       }
     }
}

for (int n = pro_len; n > 1; n--) {
/*  
   for (int i = 0; i != n - 1; i++) {
       if (prono1[i] > prono1[i + 1]){
           int wk = prono1[i];
           prono1[i] = prono1[i + 1];
           prono1[i + 1] = wk;
           int bef = i + 1;
           int aft = bef + 1;
           // processを昇順にソート
           String updateString = "<?xml version=\"1.0\" encoding=\"UCS-2\"?>" +
           "<xlnupdate version=\"1.0\">" +
                  "<update select=\"/repair_seq/operation_sheet/process[" + bef + "]\">" +
                      "<element location=\"before\" movefrom=\"/repair_seq/operation_sheet/process[" + aft + "]\"></element>" +
                  "</update>" +
           "</xlnupdate>";
            Update update = s.createUpdate(updateString);
         update.execute(theDoc2);
       }
    }
*/
}


5:[回答] ぱんだ [2003/01/24 18:27 ]

下から5行目の
update.execute(theDoc2);
ですが、これは提示していただいたソース以外の部分で宣言していますよね?
上から4行目の「thedoc2」とは別なインスタンスですよね?
通常コンパイルで「〜は宣言されていません」というエラーが出るはずですが、
なぜかVerifyErrorになる時があるようです。。。(経験あり)
はずしていたらすみません・・・


6:[回答] こねこ [2003/01/24 19:52 ]

下から5行目の"theDoc2"を"thedoc2"にし忘れてしまい,申し訳ございませんでした。
従って"theDoc2"は"thedoc2"に記述が変わりますので同じインスタンスになります。
上に提示したソースの次の処理をコメントにしたら、なぜか上のソースが正常にコンパイルされました。
しかし、上に提示したソースの次の処理(下記ソース参照)をコンパイルすると、再びVerifyErrorが発生してしまいます。
ちなみに、下に提示したソースの下から3行目のコメントをはずすとコンパイルは成功します。
ぱんださん、ご指導宜しくお願い致します。

[上に提示したソースの次の処理]

XMLStore thesite = s.getXMLStore(engineID);
XMLDocument thedoc = (XMLDocument) thesite.getFile("siteinfo.xml");
Document docnode = thedoc.getDOMDocumentNode();
Element docelem = docnode.getDocumentElement();
NodeList leveltwos = docelem.getChildNodes();

for (int i = 0; i < leveltwos.getLength(); i++) {
   if (leveltwos.item(i).getNodeName().equals("Type")) {
     type = (Element) leveltwos.item(i);
   }
   if (leveltwos.item(i).getNodeName().equals("Item")) {
     item = (Element) leveltwos.item(i);
   }
}

if (gettype.length() > 0) {
   String find2 = "0";
  NodeList typelist = type.getChildNodes();
   for (int i = 0; i < typelist.getLength(); i++) {
       String type_ls = typelist.item(i).getChildNodes().item(0).getNodeValue();
       if (type_ls.equals(gettype)) {
           find2 = "1";
       }
   }

   if (find2 == "0") {
    String update_string2 = "<?xml version=\"1.0\"?>" +
                       "<xlnupdate version=\"1.0\">" +
                         "<update select=\"/Site/Type\">" +
                         "<element location=\"lastchild\">" +
                             "<TypeNo>" + gettype  + "</TypeNo>" +
                         "</element>" +
                         "</update>" +
               "</xlnupdate>";

      resTarget = engineID + ":/siteinfo.xml";
      update = s.createUpdate(update_string2);
      update.execute(resTarget);
   }
}

if (partitem.length() > 0) {
   String find3 = "0";  
   NodeList itemlist = item.getChildNodes();

   for (int i = 0; i < itemlist.getLength(); i++){       //String item_ls = itemlist.item(i).getChildNodes().item(0).getNodeValue();
   }
}


7:[質問] こねこ [2003/01/24 20:10 ]

すみません、回答で送ってしまいました。
まだ、質問中ですので宜しくお願い致します。


8:[保留] ぱんだ [2003/01/27 11:34 ]

これという回答がわかりません。
申し訳ないです。
今更ですが、存在しているNodeにアクセスしているのかというところが
気になりますが・・・


9:[完了] こねこ [2003/01/27 18:39 ]

ソースを作り直したらコンパイル通りました。
コードのどこかに余分な空白、改行コードが入っていたと思われます。
ぱんださん、一緒に考えてくれてありがとうございました。
お騒がせしてすみませんでした。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World