我已经开始使用增强型for循环,因为它使用ArrayLists
的最佳做法和习惯。
我的代码基本上得到一个ArrayList,其中包含歌曲链接并解析下载歌曲的列表。引发的异常之一是TimeoutException,通常在服务器过载或互联网连接不稳定时发生。
澄清:
try
{
for(Track track : album.getTracks())
{
songdown.downloadTrack(track, directorio, formataudio);
}
}
catch (TimeoutException te)
{
System.out.println("Timeout!");
}
track是一个由listdown.downloadTrack函数逐个解析的ArrayList whitch。当下载失败时,会引发TimeoutException,但我不知道如何处理此异常以删除我生成的文件并从同一轨道重新启动for语句,以便下载可以再次发生。
答案 0 :(得分:6)
虽然这是一个悬而未决的问题,但这样做会更好,你最好还是选择内部循环重试直到成功为止。像这样:
for (Track track : album.getTracks()) {
boolean downloaded = false;
while (!downloaded) {
try {
songdown.downloadTrack(track, directorio, formataudio);
downloaded = true;
} catch (TimeoutException te) { /* delete partially downloaded song etc */ }
}
}
您可能希望在for循环的每次迭代中进行最大重试次数或其他一些额外的检查,以避免无限循环。
答案 1 :(得分:0)
请先通过this。首先,一旦try块完成,catch块应该开始。
您可以捕获catch块中的异常,并在发生异常时编写您想要执行的代码,在您重新开始的情况下,删除下载的一半歌曲。
答案 2 :(得分:0)
肯定有很多有效的方法。
这是一种可能性:
int failureCount = 0;
while (failureCount < maxFailures) {
try {
parseAndDownload(someList);
break;
}
catch (Exception ex) {
failureCount ++;
}
}
答案 3 :(得分:0)
以下是一个代码段示例,我认为您可以按照这种方式解决问题
ArrayList<String> a = new ArrayList<String>();
a.add("a");
a.add("w");
a.add("d");
//Iterator<String> i = a.iterator();
for(String s:a){
try{
if(s.equals("w")){
throw new Exception("Hello");
}else{
System.out.println(s);
}
}catch (Exception e) {
continue;
}
}
在这个片段中,我明确地抛出了一个异常,当它被抛出时,catch块将被执行,我使用了关键字 continue 。此关键字旨在解决这类问题。