反復的なプログラミング タスクが実行されるアプリケーションに取り組んでいます。
このタスクの一部として、値が変数に割り当てられ、この変数がハッシュマップに挿入され、一部の操作で使用され、ハッシュマップの値が同じ変数の新しい値に置き換えられます。
つまり、最初の値が使い果たされた後、別の値が同じ変数に割り当てられます->変数がハッシュマップに挿入されます->操作で使用するためにハッシュマップからフェッチされた値->などです。
このようにして、ハッシュマップから多くの値が追加されます->使用されます->更新されます。これはすべて、カウンター変数を持つ while ループで発生しています。
問題は、while ループのランダムな段階で、指定されたキーを持つオブジェクトがハッシュマップに含まれていないというエラーが突然スローされることです。
これは、while ループの同じカウンター番号で発生することはありません...ここで何が間違っていますか? これは、ハッシュマップに値を繰り返し挿入 -> 使用 -> 更新したために発生していますか?
あなたの参照のために、データをハッシュマップに挿入するコードを以下に示します--
/* Function to store a variable- key value pair at designated level, in scraper context..
*
*/
public Object putVar(Object key, Variable value, Integer level) {
super.put((this.getStringKey(key)+"~"+level.toString()), value);
return null;
}
ハッシュマップからデータを取得するコードを以下に示します--
/* Function to obtain object (value) with specified key and level in scraper context...
*
*/
public Object get(Object key, Integer level) {
String req= this.getStringKey(key);
boolean found=false;
System.out.println(" REQUIRED- Variable name="+ req + "level="+ level);
for(int i= level; i>=1; i--)
{
if(this.containsKey(req+"~"+level.toString()) )
{
found=true;
break;
}
}
if(found==true)
return(this.get(req+"~"+level.toString()));
else
return null;
}
更新- 例外スタック トレースを以下に示します---
ERROR - Variable 'webpage' is not defined!
org.webharvest.exception.VariableException: Variable 'webpage' is not defined!
at org.webharvest.runtime.processors.VarProcessor.execute(VarProcessor.java:70)
at org.webharvest.runtime.processors.BaseProcessor.run(BaseProcessor.java:119)
at org.webharvest.runtime.processors.BodyProcessor.execute(BodyProcessor.java:28)
at org.webharvest.runtime.processors.BaseProcessor.getBodyTextContent(BaseProcessor.java:176)
at org.webharvest.runtime.processors.BaseProcessor.getBodyTextContent(BaseProcessor.java:184)
at org.webharvest.runtime.processors.BaseProcessor.getBodyTextContent(BaseProcessor.java:188)
at org.webharvest.runtime.processors.FileProcessor.executeFileWrite(FileProcessor.java:146)
at org.webharvest.runtime.processors.FileProcessor.execute(FileProcessor.java:95)
at org.webharvest.runtime.processors.BaseProcessor.run(BaseProcessor.java:119)
at org.webharvest.runtime.processors.BodyProcessor.execute(BodyProcessor.java:28)
at org.webharvest.runtime.processors.WhileProcessor.execute(WhileProcessor.java:112)
at org.webharvest.runtime.processors.BaseProcessor.run(BaseProcessor.java:119)
at org.webharvest.runtime.Scraper.execute(Scraper.java:179)
at org.webharvest.runtime.Scraper.execute(Scraper.java:195)
at org.webharvest.gui.ScraperExecutionThread.run(ScraperExecutionThread.java:56)
最後に、この例外をスローする関連コードを以下に示します。使用されているハッシュマップの名前は「context」です。
Variable var = (Variable) context.get(name, curr_level);
if (var == null) {
throw new VariableException("Variable '" + name + "' is not defined!");
}