2015-05-05 4 views
2

У меня есть способ загрузить файл клиента, выбрав его в диалоговом окне «Открыть файл», и он работает, за исключением тех случаев, когда я нажимаю кнопку «Отмена». Он по-прежнему загружает выбранный файл, даже если я нажму кнопку «Отмена». Я хочу загрузить пользовательское исключение, если я нажму кнопку «Отмена». Любая помощь в том, как реализовать пользовательское исключение в моем методе, пожалуйста? БлагодаряThrow and Catch Custom Exception

private void loadCustomerActionPerformed(java.awt.event.ActionEvent evt) { 
    Customer customerfile = null; 
    try { 

    final JFileChooser chooser = new JFileChooser("Customers/"); 
    int chooserOption = chooser.showOpenDialog(null); 
    chooserOption = JFileChooser.APPROVE_OPTION; 

    File file = chooser.getSelectedFile(); 
    ObjectInputStream in = new ObjectInputStream(
     new FileInputStream(file) 
    ); 

    customerfile = (Customer) in .readObject(); 

    custnameTF.setText(customerfile.getPersonName()); 
    custsurnameTF.setText(customerfile.getPersonSurname()); 
    custidTF.setText(customerfile.getPersonID()); 
    custpassidTF.setText(customerfile.getPassaportID()); 
    customertellTF.setText(customerfile.getPersonTel()); 
    customermobTF.setText(customerfile.getPersonMob()); 
    consnameTF.setText(customerfile.getConsultantname()); 
    conssurnameTF.setText(customerfile.getConsultantsurname()); 
    considTF.setText(customerfile.getConsulid()); 

    in .close(); 

    } catch (IOException ex) { 
    System.out.println("Error Loading File" + ex.getMessage()); 
    } catch (ClassNotFoundException ex) { 
    System.out.println("Error Loading Class"); 
    } finally { 
    System.out.println("Customer Loaded"); 
    } 

} 
+0

Пожалуйста, не используйте фрагменты Javascript для Java. –

ответ

2

Сделайте объявление метода в TRow вашего исключения:

private void loadCustomerActionPerformed(java.awt.event.ActionEvent evt) 
    throws CustomException { 

Вы всегда даете APPROVE_OPTION к chooserOption:

chooserOption = JFileChooser.APPROVE_OPTION; 

Вы должны диалоговой кнопка слушателю, чтобы изменить эту переменные и добавить условие:

if (chooserOption == JFileChooser.APPROVE_OPTION) { 
    // load file 
} else { 
    throw new CustomException("ERROR MESSAGE"); 
} 

И ваш CustomException Класс должен выглядеть так:

class CustomExceptionextends Exception { 
    public CustomException(String msg) { 
     super(msg); 
    } 
} 
+0

Привет, спасибо за ваш ответ, теперь я понимаю концепцию, но когда я пытаюсь вставить свое пользовательское исключение, его высказывание «конструктор CancelExcpetion в классе CancelExcpetion нельзя применить к заданным типам, требуется String» –

+1

полностью верно, пожалуйста, проверьте мое обновление ,вы должны выбросить обход, который соответствует заданному конструктору: 'throw new CustomException (« ERROR MESSAGE »);' !!!! –

+1

Удивительный Хорди! Большое спасибо :) –

0

вы не используете chooserOption после того, как он выбрал значение, просто добавьте, если условие, проверить для значения chooserOption, если выбран, оформленную еще бросить ваше исключение

3

Похоже, вы выполняя назначение вместо теста на результат выбора.

Вместо

chooserOption = JFileChooser.APPROVE_OPTION; 

вы должны иметь

if (chooserOption == JFileChooser.APPROVE_OPTION) { 
    // handle open file 
} else { 
    throw new CancelException(); 
} 

EDIT

В ответ на комментарий, исключения должны продлить либо исключений (для проверяемых исключений), RuntimeException (для неконтролируемые исключения) или потомком одного из этих классов. Единственное отличие на этом уровне заключается в том, что вам не нужно объявлять неконтролируемые исключения в throws подписи метода. Ваше исключение будет выглядеть примерно так:

public class CancelException extends Exception { 

    public CancelException() { 
    } 

    public CancelException(String message) { 
     super(message); 
    } 
} 

Еще один комментарий - исключения должны использоваться для исключительных обстоятельств. Обычно считается неправильной практикой использовать их для реализации логики - действительно ли вам нужно использовать исключение?

+0

Привет, спасибо за ваш ответ, теперь я понимаю концепцию, но когда я пытаюсь вставить свое пользовательское исключение, его высказывание «конструктор CancelExcpetion в классе CancelExcpetion нельзя применить к заданным типам; требуется строка« –

+1

См. Отредактированный ответ. –

+0

Спасибо Стив! :) –

1

Нельзя назначать noting chooserOption. Вы должны использовать возвращаемое значение JFileChooser.showOpenDialog(), оно содержит информацию о результатах показа диалогового окна. Пример:

int chooserOption = chooser.showOpenDialog(null); 
if (chooserOption == JFileChooser.CANCEL_OPTION) { 
    // throw your exception (or do some other actions) here 
}