Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> unreported exception java.io.IOException 
:(
    Опции темы
Elene
Дата 11.11.2004, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 26.9.2004

Репутация: нет
Всего: нет



Подскажите, пожалуйста, как решить проблему с unreported exception java.io.IOException.

Есть класс:
Код

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

public class Bdd
{
private HashMap fabricants;  //fabricants
private Set jeux;    //jeux


public Bdd () {
  fabricants = new HashMap();
  Comparator comp = new JeuxTree();
  jeux = new TreeSet(comp);
}


public Bdd (HashMap fabricants, Set jeux) {
 this.fabricants = fabricants;
 this.jeux = jeux;
}
...
}


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

public void lireBddsFabr(String nomFichierFab)  throws IOException
{

 //Verification si base de donees est deja chargee si oui, on l'efface

 if(!fabricants.isEmpty()) fabricants.clear();

 //On lire le fichier .txt
 FileReader frFabr = null;
 boolean existeFileFabr = true;
 boolean finFichierFabr = false;
 String nomFileFabr = nomFichierFab;
 try
 {
  frFabr = new FileReader(nomFileFabr);
 }
 catch (java.io.FileNotFoundException e)
 {
  System.out.println("Probleme d'ouvrir le fichier " + nomFileFabr);
  existeFileFabr = false;
 }

 if (existeFileFabr)
 {
  BufferedReader entreeFabr = new BufferedReader (frFabr);

  while (!finFichierFabr)
  {
   String codeFab = entreeFabr.readLine();

   if (codeFab != null)
   {
    String nom = entreeFabr.readLine();
    String siege = entreeFabr.readLine();
    int i = siege.indexOf(", ");
    String ville = siege.substring(0, i );
    String pays = siege.substring(i + 2);
    int anne = Integer.parseInt(entreeFabr.readLine());
    String endFabr = entreeFabr.readLine();

    Fabricant fabr = new Fabricant(nom, ville, pays, anne);
    fabricants.put(codeFab, fabr); //On rempli le map
   }
   else finFichierFabr = true;
  }
  entreeFabr.close();
 }
   }


Есть второй класс, который использует GUI, в котором есть объект класса Bdd, и в котором есть меню, кликнув на JMenuItem, которого я должна вызвать ту самую описанную выше методу lireBddsFabr(String nomFichierFab):
Код

public void actionPerformed(ActionEvent e)
  {
    String actionCommand = e.getActionCommand();

...
else if (e.getSource() instanceof JMenuItem)
    {
  if ("BdD de Fabricants".equals(actionCommand)){

   FileDialog boiteFichier = new FileDialog(this, "Ouverture de : ",FileDialog.LOAD);
   boiteFichier.show();
   String nomFichier = boiteFichier.getFile();

   bdDonnees.lireBddsFabr(nomFichier);
  }
...
}
...
}


Вот тут-то на строчке bdDonnees.lireBddsFabr(nomFichier); и появляется:
unreported exception java.io.IOException; must be caught or declared to be thrown bdDonnees.lireBddsFabr(nomFichier);
А я совершенно не понимаю, что я должна исправить. Объясните, пожалуйста.





PM MAIL   Вверх
LSD
Дата 11.11.2004, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Это ошибка времени компиляции, которая возникает когда компилятор обнаруживает возможность возникновения "контролируемых" ошибок в коде, и не находит обработчик для данной ошибки или декларирования возможности ее возникновения. В данной ситуации есть два варианта:
1) окружить bdDonnees.lireBddsFabr(nomFichier); try...catch
Код
try
{
 bdDonnees.lireBddsFabr(nomFichier);
}
catch(IOException ex)
{
// Обрабатываем ошибку
}

2) декларировать ошибку как "кидаемую"
Код
public void actionPerformed(ActionEvent e) throws IOException
...





--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Elene
Дата 11.11.2004, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 26.9.2004

Репутация: нет
Всего: нет



Спасибо.
PM MAIL   Вверх
Domestic Cat
Дата 11.11.2004, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
2) декларировать ошибку как "кидаемую"


actionPerformed не можеt бросать иксепшн, поскольку метод, который делает оверрайд метода суперкласса (интерфейса) ne mожет бросать иксепшны, не объявленныe при декларации методa суперкласса.


--------------------

PM   Вверх
LSD
Дата 11.11.2004, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Значит пункт 2 вычеркиваем smile (из данного примера, а вообще он тоже применим)


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Elene
Дата 11.11.2004, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 26.9.2004

Репутация: нет
Всего: нет



Только теперь я получила еще более страшную ошибку:
actionPerformed(java.awt.event.ActionEvent) in Tp21 cannot implement actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener; overridden method does not throw java.io.IOException
public class Tp21 extends JFrame implements ActionListener
^
Как дальше быть?

Добавлено @ 20:36
Ура!!! Я вычеркнула и все заработало. Большое спасибо!!!
PM MAIL   Вверх
Domestic Cat
Дата 11.11.2004, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



этo был второй способ kоторый не сработал smile делай как в пункте 1).


--------------------

PM   Вверх
Elene
Дата 11.11.2004, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 26.9.2004

Репутация: нет
Всего: нет



Кажется, я рано порадовалась. Это оно откомпелировалось без ошибки, а вот когда я решила все это запустить, т.е. на кнопочку кликнуть в меню, получилось вот что:
Exception occurred during event dispatching:
java.lang.NullPointerException
at Tp2.actionPerformed(Tp2.java:191)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:14
45)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Abstra
ctButton.java:1499)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
.java:373)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:245
)
at javax.swing.AbstractButton.doClick(AbstractButton.java:274)
at javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseRelease
d(BasicMenuItemUI.java:882)
at java.awt.Component.processMouseEvent(Component.java:3710)
at java.awt.Component.processEvent(Component.java:3539)
at java.awt.Container.processEvent(Container.java:1159)
at java.awt.Component.dispatchEventImpl(Component.java:2588)
at java.awt.Container.dispatchEventImpl(Container.java:1208)
at java.awt.Component.dispatchEvent(Component.java:2492)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2451
)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2216)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2125)
at java.awt.Container.dispatchEventImpl(Container.java:1195)
at java.awt.Window.dispatchEventImpl(Window.java:923)
at java.awt.Component.dispatchEvent(Component.java:2492)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:334)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:126)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:93)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:88)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:80)
Что это все значит, и откуда может взяться NullPointerException, если я его уже отловила в самой функции?
PM MAIL   Вверх
Domestic Cat
Дата 11.11.2004, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



А что в строкe 191?


--------------------

PM   Вверх
Elene
Дата 11.11.2004, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 26.9.2004

Репутация: нет
Всего: нет



Как раз bdDonnees.lireBddsFabr(nomFichier);
Добавлено @ 21:16
На nomFichier я сделала вывод, он не пустой, а с названием файла, который надо считать.
Добавлено @ 21:22
Даже я сделала на прямую загрузку файла без FileDialog, т.е.
Код

bdDonnees.lireBddsFabr("cie.txt");

Все тот же NullPointerException. Не могу понять, как это может быть. Может быть у меня в самом методе что-то напутано?

PM MAIL   Вверх
Domestic Cat
Дата 11.11.2004, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Проверь, можet bdDonnees == null. Если неt, зaпостi код lireBddsFabr()


--------------------

PM   Вверх
LSD
Дата 11.11.2004, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



bdDonnees определенно null.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Elene
Дата 11.11.2004, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 26.9.2004

Репутация: нет
Всего: нет



Да, действительно, так и было. Я ее обявила в мемберах, как private Bdd bdDonnees; , а в конструкторе написала: Bdd bdDonnees = new Bdd(); вместо bdDonnees = new Bdd(); Отсюда и NullPointerException. Огромное спасибо. Я сама бы никогда не догадалась, где "собака зарыта". Сейчас все отлично работает, можно сказать, благодаря Вам.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0850 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.