2

例: ファイルを開きたいとします。を取得した場合はFileNotFoundException、しばらく待ってから再試行する必要があります。どうすれば優雅にそれを行うことができますか?try/catchまたは、ネストされたブロックを使用する必要がありますか?

例 :

public void openFile() {
    File file = null; 
    try {
        file = new <....>
    } catch(FileNotFoundException e) {
    }
    return file;
}
4

3 に答える 3

5

do { ... } while (file == null)コンストラクトを使用できます。

File file = null; 

do {
    try {
        file = new <....>
    } catch(FileNotFoundException e) {
        // Wait for some time.
    }
} while (file == null);

return file;
于 2012-07-03T12:53:27.317 に答える
3
public File openFile() {
  File file = null; 
  while (file == null) {
    try {
      file = new <....>
    } catch(FileNotFoundException e) {
      // Thread.sleep(waitingTime) or what you want to do
    }
  }
  return file;
}

ファイルが最終的に表示されない限り、抜け出す方法がないため、これはやや危険な方法であることに注意してください。カウンターを追加して、一定回数試行した後にあきらめることができます。たとえば、次のようになります。

while (file == null) {
  ...
  if (tries++ > MAX_TRIES) {
    break;
  }
}
于 2012-07-03T12:54:16.270 に答える
1
public File openFile() {
    File file = null; 
    while(true){
      try {
          file = new <....>
      } catch(FileNotFoundException e) {
            //wait for sometime
      }
      if(file!=null){
               break;  
      }
    }
    return file;
 }
于 2012-07-03T12:53:39.890 に答える