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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MouseListener() во внутреннем классе, Не срабатывает при перегрузке конструкто 
V
    Опции темы
tolet
Дата 16.10.2006, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



Здравствуйте!

У меня в коде есть внутренний класс, который использует прослушиватель мыши MouseListener(). При перегрузке конструктора этого внутреннего класса прослушиватель не работает, а в консоли пишет : Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
. Подскажите пожалуйста причину.
PM MAIL WWW ICQ   Вверх
LSD
Дата 16.10.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Код того места где возникает ошибка. И обязательно укажи строку где она происходит.


--------------------
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   Вверх
tolet
Дата 16.10.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



Вот код:

Код

package previewbar;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author Vlad
 */
public class Main extends JPanel {
    
        private final static int P0=0;
    private final static int P5=1;
    private static int p1=2, p2=3, p3=4, p4=5;
    private static ArrayList<String> pfn = new ArrayList<String>();
    private static ArrayList<String> pln = new ArrayList<String>();
    private static ArrayList<String> c = new ArrayList<String>();
    private static ArrayList<String> dop = new ArrayList<String>();
    private static ArrayList<String> top = new ArrayList<String>();
    private static ArrayList<String> mfp = new ArrayList<String>();
    private static ArrayList<String> hfp = new ArrayList<String>();
    private static ArrayList<String> cfp = new ArrayList<String>();
    private static ArrayList<String> bfp = new ArrayList<String>();
    private static URL mainURL, hoverURL, clickURL, bigURL;
    private static ImageIcon main, hover, click, big;
    private static Color color = new Color(153, 102, 102);
    private static Font labelFont = new Font("Arial", Font.BOLD, 14);
    

    //достаем данные из файла photosdb.txt и определяем поля
    private static void getData () {
        
        try {
            InputStreamReader f = new InputStreamReader (new FileInputStream ("D:\\Docum\\PreviewBar\\Catalogue\\build\\classes\\catalogue\\photosdb.txt"),"Cp1251");
            BufferedReader in = new BufferedReader(f);
            String s;
            String TokensArr [] = new String [9];
            while ((s = in.readLine()) != null) {
        StringTokenizer st = new StringTokenizer(s,"\t");
                for (int i=0;i<9;i++) {
            TokensArr[i] = (String) st.nextElement();
                        System.out.println(TokensArr[i]);
                }
                pfn.add(new String (TokensArr[0]));
                pln.add(new String (TokensArr[1]));
                c.add(new String (TokensArr[2]));
                dop.add(new String (TokensArr[3]));
                top.add(new String (TokensArr[4]));
                mfp.add(new String (TokensArr[5]));
                hfp.add(new String (TokensArr[6]));
                cfp.add(new String (TokensArr[7]));
                bfp.add(new String (TokensArr[8]));
                System.out.println(pfn);
                System.out.println(pln);
                System.out.println(c);
                System.out.println(dop);
                System.out.println(top);
                System.out.println(mfp);
                System.out.println(hfp);
                System.out.println(cfp);
                System.out.println(bfp);
                
            }
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }
    }
    
    private class SmallPreviewBlock extends JPanel implements MouseListener {

        
        private CardLayout cl;
        private int j;
        JPanel cards;


        // создаем Блок превьюшки
        public SmallPreviewBlock (int i) {

            //JPanel cards;
            
            j=i;
            
            java.net.URL mainURL = Main.class.getResource(mfp.get(i));
            java.net.URL hoverURL = Main.class.getResource(hfp.get(i));
            java.net.URL clickURL = Main.class.getResource(cfp.get(i));

            //создаем иконки
            main = new ImageIcon(mainURL);
            hover = new ImageIcon(hoverURL);
            click = new ImageIcon(clickURL);

            //создаем карты для колоды
            JPanel mainPanel = new JPanel();
            Dimension d = new Dimension(97, 90);
            mainPanel.setMinimumSize(d);
            mainPanel.setBackground(color);
            JLabel mainLabel = new JLabel(main);
            mainLabel.setSize(97, 90);
            mainPanel.add(mainLabel);
            JPanel hoverPanel = new JPanel();
            hoverPanel.setSize(97, 90);
            hoverPanel.setBackground(color);
            JLabel hoverLabel = new JLabel(hover);
            hoverLabel.setSize(97, 90);
            hoverPanel.add(hoverLabel);
            JPanel clickPanel = new JPanel();
            clickPanel.setSize(97, 90);
            clickPanel.setBackground(color);
            JLabel clickLabel = new JLabel(click);
            clickLabel.setSize(97, 90);
            clickPanel.add(clickLabel);

            //создаем панель "колоду" и добавляем в нее карты
            cards = new JPanel(new CardLayout());
            cards.add(mainPanel, "MAIN");
            cards.add(hoverPanel, "HOVER");
            cards.add(clickPanel, "CLICK");
            cards.addMouseListener(this);

            CardLayout cl = (CardLayout)(cards.getLayout());
            cl.show(cards, "MAIN");
            
            //pane.add(cards);
            
           
       
        }
        
            // Обрабатываем события мыши
        public void mouseClicked(MouseEvent e) {

            if (j==0) {leftArrowMath();}
            if (j==5) {rightArrowMath();}

        }

        public void mousePressed(MouseEvent e) {

            cl.show(cards, "CLICK");

        }

        public void mouseReleased(MouseEvent e) {

            cl.show(cards, "HOVER");

        }

        public void mouseEntered(MouseEvent e) {

            cl.show(cards, "HOVER");

        }

        public void mouseExited(MouseEvent e) {

            cl.show(cards, "MAIN");

        }

    }
  
    
       
       //создаем обсчет математики при нажатии на правую стрелку
    private static void rightArrowMath () {
        
        //определяем количество элементов в безразмерном массиве catalogue
        int i = pfn.size();
        
        //определяем новые значения отображаемых картинок
        if (p1<(i--)) {p1++;} else {p1=2;}
        if (p2<(i--)) {p2++;} else {p2=2;}
        if (p3<(i--)) {p3++;} else {p3=2;}
        if (p4<(i--)) {p4++;} else {p4=2;}
        
        //перерисовываем полосу превьюшек
        //previewBar().repaint();
        
    }
    
    //создаем обсчет математики при нажатии на левую стрелку
    private static void leftArrowMath () {
        
        //определяем количество элементов в безразмерном массиве catalogue
        int i = pfn.size();
        
        //определяем новые значения отображаемых картинок
        if (p1>2) {p1--;} else {p1=i--;}
        if (p1>2) {p2--;} else {p2=i--;}
        if (p1>2) {p3--;} else {p3=i--;}
        if (p1>2) {p4--;} else {p4=i--;}
        
        //перерисовываем полосу превьюшек
        //previewBar().repaint();
        
    }

    
  
    
    /** Creates a new instance of Main*/
    public void previewBar(Container pane) {
        //создаем панель-подложку
        JPanel previewBar = new JPanel(new FlowLayout());
        previewBar.setSize(582, 90);
        previewBar.setBackground(color);
        
        
        //помещаем панели превьюшек на подложку
  
        previewBar.add(new SmallPreviewBlock(P0).cards);
        previewBar.add(new SmallPreviewBlock(p1).cards);
        previewBar.add(new SmallPreviewBlock(p2).cards);
        previewBar.add(new SmallPreviewBlock(p3).cards);
        previewBar.add(new SmallPreviewBlock(p4).cards);
        previewBar.add(new SmallPreviewBlock(P5).cards);
        pane.add(previewBar);
        
        
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        getData();
        JFrame frame = new JFrame();
        
        Main block = new Main();
        block.previewBar(frame.getContentPane());
       
        frame.pack();
        frame.setVisible(true);
    }
    
}



Ошибка происходит в строках - 167 - 171 кода (реакция CardLayout на события мыши)
PM MAIL WWW ICQ   Вверх
LSD
Дата 16.10.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



У тебя переменной private CardLayout cl никогда не присваивается значение.


--------------------
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   Вверх
tolet
Дата 16.10.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



LSD,  спсибо большое за подсказку - поправил ошибочку - все заработало smile


Это сообщение отредактировал(а) tolet - 16.10.2006, 12:03
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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