2016-07-04 4 views
1

Я пытаюсь сделать клон cat, и я хочу, чтобы он получал ввод, когда был представлен -.Почему моя программа не принимает специальное исключение?

Главный(); здесь:

import java.io.*; 
import java.util.*; 

class cat { 
    public static void main(String[] args) { 
    for (int i = 0; i < args.length; i++) { 

     try{ 
     filePrint(args[i]); 

     } catch(DashException letsTryThis){ 
      catDash(); 
     } catch(FileNotFoundException wrong) { 
      System.err.println(String.format("%s: File Not Found.", args[i])); 
     } catch (IOException noWords) { 
      System.err.println(String.format("%s: File can't be read.", args[i])); 
     } 
    } 
    } 
} 

filePrint() просто печатает файл построчно и catDash() получает и печатает со стандартным вводом. Ничего особенного.

То, что я пытаюсь сделать, - это специальное исключение, которое специально улавливает - и вызывает catDash() (первый блок catch выше). Однако, несмотря ни на что, блок try/catch всегда выдает исключение FileNotFound wrong (второй блок catch выше). Мой вопрос: как мне заставить его поймать конкретную причину и бросить ее раньше, чем второй блок?

Мои DashException, как определено его собственный файл:

import java.lang.Throwable; 

public class DashException extends FileNotFoundException{ 
    public DashException(Throwable cause){ 
    super("-") 
    } 
} 
+1

DashException - это FileNotFoundException ... почему бы вам просто не выбросить FileNotFoundException ??? –

ответ

9

Вы не бросайте пользовательского исключения из любого места. Вы должны указать throw в своем коде в блоке try. Например .:

if (args[i].equals("-")) { 
    throw new DashException(); 
} 

И вы можете удалить th из constuctor, так как нет коренной причины этого исключения.

+0

filePrint() throws FileNotFoundException, IOException и мое собственное исключение DashException. Это то, что вы имели ввиду? –

+0

Вам не нужно добавлять его в подпись, так как 'DashException' является' FileNotFoundException'. – meskobalazs

+0

И просто добавив ваше исключение в throws объявление не будет ничего хорошего для вашего конкретного исключения, если он не бросает его, как показано @meskobalazs. –

Смежные вопросы