}
/**
+ * アンカー先を含むPeriodの全会話を事前にロードする。
+ *
+ * @param village 村
+ * @param anchor アンカー
+ * @return アンカー先を含むPeriod。
+ * アンカーがG国発言番号ならnull。
+ * Periodが見つからないならnull。
+ * @throws IOException 入力エラー
+ */
+ private Period loadAnchoredPeriod(Village village, Anchor anchor)
+ throws IOException{
+ if(anchor.hasTalkNo()) return null;
+
+ Period anchorPeriod = village.getPeriod(anchor);
+ if(anchorPeriod == null) return null;
+
+ PeriodLoader.parsePeriod(anchorPeriod, false);
+
+ return anchorPeriod;
+ }
+
+ /**
* アンカーにジャンプする。
*/
private void actionJumpAnchor(){
final List<Talk> talkList;
try{
+ loadAnchoredPeriod(village, anchor);
talkList = village.getTalkListFromAnchor(anchor);
if(talkList == null || talkList.size() <= 0){
updateStatusBar(
final List<Talk> talkList;
try{
+ loadAnchoredPeriod(village, anchor);
talkList = village.getTalkListFromAnchor(anchor);
if(talkList == null || talkList.size() <= 0){
updateStatusBar(
package jp.sfjp.jindolf.data;
import java.awt.image.BufferedImage;
-import java.io.IOException;
import java.text.MessageFormat;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import jp.sfjp.jindolf.data.html.PeriodLoader;
import jp.sfjp.jindolf.util.GUIUtils;
import jp.sourceforge.jindolf.corelib.LandDef;
import jp.sourceforge.jindolf.corelib.VillageState;
* アンカーに一致する会話(Talk)のリストを取得する。
* @param anchor アンカー
* @return Talkのリスト
- * @throws java.io.IOException おそらくネットワークエラー
*/
- public List<Talk> getTalkListFromAnchor(Anchor anchor)
- throws IOException{
+ public List<Talk> getTalkListFromAnchor(Anchor anchor){
List<Talk> result = new LinkedList<>();
/* G国アンカー対応 */
if(anchor.hasTalkNo()){
- // 事前に全Periodがロードされているのが前提
+ // äº\8bå\89\8dã\81«å\85¨Periodã\81®å\85¨ä¼\9a話ã\81\8cã\83ã\83¼ã\83\89ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81®ã\81\8cå\89\8dæ\8f\90
for(Period period : this.periodList){
Talk talk = period.getNumberedTalk(anchor.getTalkNo());
if(talk == null) continue;
Period anchorPeriod = getPeriod(anchor);
if(anchorPeriod == null) return result;
- PeriodLoader.parsePeriod(anchorPeriod, false);
+ // 事前にアンカー対象Periodの全会話がロードされているのが前提
for(Topic topic : anchorPeriod.getTopicList()){
if( ! (topic instanceof Talk) ) continue;