Ошибка java.awt.AWTEventMulticaster.mouseEntered

Узнай цену своей работы

Формулировка задачи:

Добрый день! Подскажите плиз начинающему программисту. Начал писать программку и столкнулся с необъяснимым для себя. Очень часто (не всегда) возникают ошибки: java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:299) at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:299) at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:299) at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:299) ... Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:279) at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:279) at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:279) ... at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:279) Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) Причем ссылок на номер строки в моей проге нет Когда я открываю на коды ошибок в консоли IntelliJ IDEA открывается -

public class AWTEventMulticaster implements

и ссылка на метод в этом классе, например public void mouseReleased(MouseEvent e) { * ((MouseListener)a).mouseReleased(e); ((MouseListener)b).mouseReleased(e); } голову уже сломал, что делать и что не так
мой фрейм
package com.zerg.Shitalochka;
 
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.font.FontRenderContext;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.io.File;
import java.io.IOException;
 
public class MyFrame  extends JFrame {
    private Image imageYear;
    private Image imageMonth;
    private int monthInt = 0; // номер выбранного месяца
    private int dayNumberInt = 0; // номер выбранного дня
    private int yearInt = 0; // номер выбранного года
    private int firstDay = 0; // начальная позиция заполнения дней
    private int endDay = 0; // конечная позиция заполнения дней
    private Object monthArrayObject; // массив для помещения всех данных одного месяца
    private int monthArrayInt [] [];
    private int mouseClickedX = 0;
    private int mouseClickedY = 0;
    private int mousePressedX = 0;
    private int mousePressedY = 0;
    private int dayWeek = 0;
 
    public boolean closeFrameDayBoolean;

    final String monthString1 = "Январь";
    final String monthString2 = "Февраль";
    final String monthString3 = "Март";
    final String monthString4 = "Апрель";
    final String monthString5 = "Май";
    final String monthString6 = "Июнь";
    final String monthString7 = "Июль";
    final String monthString8 = "Август";
    final String monthString9 = "Сентябрь";
    final String monthString10 = "Октябрь";
    final String monthString11 = "Ноябрь";
    final String monthString12 = "Декабрь";
    final String [] monthArray = new String[12];
 
    public final String [] dayOfWeekArray = new String[7];
 
    Rectangle2D [] arrayRectangle = new Rectangle2D[13]; // 12 рамок месяцев и 1 рамка выделения
    RoundRectangle2D rectButton = null; // кнопка в меню месяца
 
    Rectangle2D [] arrayRectangleDay = new Rectangle2D[43]; // 43 рамки для всех дней
 
    boolean newImageBooleanYear = false; // прорисовка меню года
    boolean newImageBooleanMonth = false; // прорисовка меню месяца
    boolean newImageBooleanDay = false; // прорисовка меню дня
    boolean selectionMonth = false; // прорисовка выделения месяца
    boolean selectionRectButton = false; // выбрана кнопка назад или нет
    boolean createFrameDay = true; // если фрейм дня еще не создан
 
    private int xRec13 = 0; //координаты выделения в меню год
    private int yRec13 = 0;
    private int hRec13 = 0;
    private int wRec13 = 0;
 
    private int xRecDay = 0; // координаты выделения в меню месяц
    private int yRecDay = 0;
    private int hRecDay = 0;
    private int wRecDay = 0;

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    int heightScreen = screenSize.height;
    int widthScreen = screenSize.width;
    int heightFrame = heightScreen*3/4;
    int widthFrame = widthScreen*3/4;
 
    private String textUpString = "";
    //private String textDownString = "";
    private String fonString = "fon.png";
    private String menuYearString = "12.jpg";
    private String menuMontString = "month.gif";
 
    private JLabel textUp;
    private JTextField textDown;

Решение задачи: «Ошибка java.awt.AWTEventMulticaster.mouseEntered»

textual
Листинг программы
arrayRectangleDay [0] = rectMonth11;
                    arrayRectangleDay [1] = rectMonth12;
                    arrayRectangleDay [2] = rectMonth13;
                    arrayRectangleDay [3] = rectMonth14;
                    arrayRectangleDay [4] = rectMonth15;
                    arrayRectangleDay [5] = rectMonth16;
                    arrayRectangleDay [6] = rectMonth17;
 
                    arrayRectangleDay [7] = rectMonth21;
                    arrayRectangleDay [8] = rectMonth22;
                    arrayRectangleDay [9] = rectMonth23;
                    arrayRectangleDay [10] = rectMonth24;
                    arrayRectangleDay [11] = rectMonth25;
                    arrayRectangleDay [12] = rectMonth26;
                    arrayRectangleDay [13] = rectMonth27;
 
                    arrayRectangleDay [14] = rectMonth31;
                    arrayRectangleDay [15] = rectMonth32;
                    arrayRectangleDay [16] = rectMonth33;
                    arrayRectangleDay [17] = rectMonth34;
                    arrayRectangleDay [18] = rectMonth35;
                    arrayRectangleDay [19] = rectMonth36;
                    arrayRectangleDay [20] = rectMonth37;
 
                    arrayRectangleDay [21] = rectMonth41;
                    arrayRectangleDay [22] = rectMonth42;
                    arrayRectangleDay [23] = rectMonth43;
                    arrayRectangleDay [24] = rectMonth44;
                    arrayRectangleDay [25] = rectMonth45;
                    arrayRectangleDay [26] = rectMonth46;
                    arrayRectangleDay [27] = rectMonth47;
 
                    arrayRectangleDay [28] = rectMonth51;
                    arrayRectangleDay [29] = rectMonth52;
                    arrayRectangleDay [30] = rectMonth53;
                    arrayRectangleDay [31] = rectMonth54;
                    arrayRectangleDay [32] = rectMonth55;
                    arrayRectangleDay [33] = rectMonth56;
                    arrayRectangleDay [34] = rectMonth57;
 
                    arrayRectangleDay [35] = rectMonth61;
                    arrayRectangleDay [36] = rectMonth62;
                    arrayRectangleDay [37] = rectMonth63;
                    arrayRectangleDay [38] = rectMonth64;
                    arrayRectangleDay [39] = rectMonth65;
                    arrayRectangleDay [40] = rectMonth66;
                    arrayRectangleDay [41] = rectMonth67;
                    if (selectionMonth) { // выбор дня
                        Rectangle2D rectMonth = new Rectangle2D.Double(xRecDay, yRecDay, wRecDay, hRecDay);
                        graphics2D.setColor(new Color(60, 255, 8));
                        graphics2D.fill(rectMonth);
                    }
 
                    if (selectionRectButton) { // кнопка "назад"
                        graphics.setColor(new Color(59, 255, 6));
                    }
                    else graphics.setColor(Color.WHITE);
                    rectButton = new RoundRectangle2D.Double(x+w*6,y*2/5,w,h,10,10);
                    graphics2D.fill(rectButton);
 
                    dayOfWeekArray [0] = "понедельник";
                    dayOfWeekArray [1] = "вторник";
                    dayOfWeekArray [2] = "среда";
                    dayOfWeekArray [3] = "четверг";
                    dayOfWeekArray [4] = "пятница";
                    dayOfWeekArray [5] = "суббота";
                    dayOfWeekArray [6] = "воскресенье";
 
                    graphics.setColor(new Color(2, 0, 185));
                    font = new Font ("SansSerif",Font.BOLD,(getWidth()/60));
                    graphics.setFont(font);
                    graphics.drawString(dayOfWeekArray[0], x + 3, y + h * 3 / 5);
                    graphics.drawString(dayOfWeekArray[1], x + 3, (y + h * 3 / 5) + h);
                    graphics.drawString(dayOfWeekArray [2],x+3,(y+h*3/5)+h*2);
                    graphics.drawString(dayOfWeekArray[3], x + 3, (y + h * 3 / 5) + h * 3);
                    graphics.drawString(dayOfWeekArray [4],x+3,(y+h*3/5)+h*4);
                    graphics.setColor(new Color(158, 3, 2));
                    graphics.drawString(dayOfWeekArray[5], x + 3, (y + h * 3 / 5) + h * 5);
                    graphics.drawString(dayOfWeekArray [6],x+3,(y + h * 3 / 5) + h * 6);
                    graphics.setColor(new Color(1, 106, 53));
                    font = new Font ("SansSerif",Font.BOLD,(getWidth()/40));
                    graphics.setFont(font);
                    graphics.drawString("назад",(x+w*7)-w*31/40,y*5/7);
 
                    monthArrayObject = Year.getIntMenuMonth(monthInt);  // получение данных
                    monthArrayInt = (int[][]) monthArrayObject; // приведение к int
                    int monthSize = monthArrayInt [0] [0] /10; // колличество дней в месяце
                    dayWeek = monthArrayInt [0] [0] - ((monthSize)*10); // день недели 1-го числа месяца
                    int dayNumber = 1; // счетчик дней для цикла
                    boolean runInt = false; // флажок начала отчета
 
                    // прорисовка дней  и чисел в клеточках
                    for (int iStr  = 1; iStr <= 6; iStr ++){
                        for ( int iWeek = 0; iWeek < 7; iWeek ++){
                            if (dayNumber <= monthSize){
                                if (iWeek == (dayWeek-1) || runInt){
 
                                    runInt = true;
 
                                    graphics.setFont(new Font ("SansSerif",Font.BOLD,(getWidth()/25)));
                                    if (iWeek > 4) graphics.setColor(new Color(156,10,10));
                                    else graphics.setColor(new Color(1, 106, 53));
                                    graphics.drawString(String.valueOf(dayNumber),(x + w/3)+w*iStr, (y + h * 3 / 5) + h * iWeek);
 
                                    graphics.setColor(Color.BLACK);
                                    graphics.setFont(new Font ("SansSerif",Font.ITALIC,(getWidth()/60)));
                                    graphics.drawString(String.valueOf((monthArrayInt [0] [1])+"/"+(monthArrayInt [0] [2])),(x + w/10)+w*iStr, (y + h * 30 / 32) + h * iWeek);
                                    dayNumber++;
                                }
                            }
 
                        }
                    }
                    // выбор дня
 
                    Point2D pointMonth1 = new Point2D.Double(mousePressedX,mousePressedY); // создается точка с координатами нажатия ЛКМ
                    Point2D pointMonth2 = new Point2D.Double(mouseClickedX,mouseClickedY); // создается точка с координатами отпускания ЛКМ
 
                    firstDay = dayWeek;
                    endDay = monthSize + dayWeek - 1;
                    for (int i = 0; i < 42; i++) { // создается выделение выбранного месяца
 
                        if (arrayRectangleDay[i].contains(pointMonth1)) {
                            if ((i+1) >= firstDay && (i+1) <= endDay) {
                                xRecDay = (int) arrayRectangleDay[i].getX();
                                yRecDay = (int) arrayRectangleDay[i].getY();
                                hRecDay = (int) arrayRectangleDay[i].getHeight();
                                wRecDay = (int) arrayRectangleDay[i].getWidth();
                                selectionMonth = true;
                                dayNumberInt = i - firstDay + 2; // записывается номер дня
 
                               // repaint();
                            }
                        }
                    }
                    for (int i = 0; i < 42; i++) { //отпускание кнопки на выбранном дне
 
                        if (arrayRectangleDay[i].contains(pointMonth2)) {
                            if ((i+1) >= firstDay && (i+1) <= endDay) {
                                newImageBooleanDay = true;
                                createFrameDay = true;
                                //repaint();
                            }
                        }
                    }
 
                    if (rectButton.contains (pointMonth1)){ // нажатие кнопки "назад"
                        selectionRectButton = true;
 
 
                    }
                    else selectionRectButton = false;
 
 
                    if (rectButton.contains(pointMonth2)) { // отпускание кнопки назад
                        newImageBooleanMonth = false;
                        newImageBooleanYear = true;
 
                        mouseClickedX = 0;
                        mouseClickedY = 0;
                        mousePressedX = 0;
                        mousePressedY = 0;
                        repaint();
 
 
                    }
 
 
                }
 
            if (newImageBooleanDay){ // если выбран меню день
 
 
                setDownText("Введите данные!");
                if (createFrameDay) {
 
                    //System.out.println("день создан ");// убрать
                    //Shitalochka.createFrameDay (yearInt, monthInt, dayNumberInt );
                    createFrameDay = false;
 
                }
 
            }
            if (closeFrameDayBoolean) { // пересмотреть и удалить лишнее !!!!!!!!!!!!!!!!!!!!! // удаление окна frameDay
                Shitalochka.frameDay.button1.removeAll();
                Shitalochka.frameDay.setVisible(false);
                Shitalochka.frameDay.dispose();
                newImageBooleanDay = false;
                newImageBooleanMonth = true;
                //setEnabled(true);
                //setFocusable(true);
                closeFrameDayBoolean = false;
                Shitalochka.frameDay = null;
                repaint();
            }
 
        }
 
        public MyPanel (){
            try {
                File fonFile = new File(fonString);
                imageFon = ImageIO.read(fonFile);
 
            } catch (IOException e) {
                e.printStackTrace();
            }
 
            try {
                File menuImageYear = new File(menuYearString);
                imageYear = ImageIO.read(menuImageYear);
 
            } catch (IOException e) {
                e.printStackTrace();
            }
 
            try {
                File menuImageMonth = new File(menuMontString);
                imageMonth = ImageIO.read(menuImageMonth);
 
            } catch (IOException e) {
                e.printStackTrace();
            }
 
        }
 
    }
 
 
 
 
    public MyFrame (String t){
 
        this.textUpString = t;
 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//потом это убрать
 
        setSize(widthFrame,heightFrame);
        int yFrame = (heightScreen - heightFrame)/2;
        int xFrame = (widthScreen - widthFrame)/2;
        setLocation(xFrame, yFrame);
 
        Image iconFrame = Toolkit.getDefaultToolkit().getImage("logo.png");
        setIconImage(iconFrame);
 
        setTitle("Считалочка");
 
 
 
        textUp = new JLabel ("", new ImageIcon("Z.gif"), SwingConstants.CENTER);
        textUp.setFont(new Font("SansSerif", Font.BOLD, 26));
        textUp.setForeground(Color.blue);
 
        textDown = new JTextField ("",widthFrame);
        textDown.setEditable(false);
        textDown.setFont(new Font("SansSerif", Font.BOLD, 20));
        textDown.setForeground(Color.red);
 
        textUp.setText (textUpString);
        MyPanel panel = new MyPanel();
        Container container = getContentPane();
        BorderLayout layout = new BorderLayout(1,0);
        container.add(panel, layout.CENTER);
        container.add(textUp, layout.NORTH);
        container.add(textDown, layout.SOUTH);
 
        setVisible(true);
 
 
    }
    public  void setUpText (String text){ // изменяет текст в верхней панели
        textUp.setText (text);
        repaint();
    }
    public  void setDownText (String text){ // изменяет текст в нижней панели
        textDown.setText (text);
        repaint();
    }
    public void setImage  (String text){ // загружает картинку меню в фрейм
        if (text.equals("menuYear")){
            newImageBooleanYear = true;
            repaint();
 
        }
 
 
    }
    public String getMonth (int a) { // возвращает название месяца по номеру
        String r = monthArray [a];
        return r;
    }
 
    public String getStringWeek (int a) { // возвращает название дня недели по номеру
        String r = dayOfWeekArray [a];
        return r;
    }
 
    public int [] getData () {
        int [] array = new int[3];
        array [0] = dayNumberInt; // номер выбранного месяца
        array [1] = monthInt; // номер выбранного дня
        array [2] = yearInt; // номер выбранного года
        return array;
    }
  /*  public void closeFrameDay (){
        Shitalochka.frameDay.setVisible(false);
        Shitalochka.frameDay.dispose();
        newImageBooleanDay = false;
        newImageBooleanMonth = true;
        repaint();
    } */
 
    private class MyMouse implements MouseListener {
        @Override
        public void mouseClicked(MouseEvent e) {
 
            if (!e.isAltDown() && !e.isMetaDown()) {
                mouseClickedX = e.getX();
                mouseClickedY = e.getY();
                //System.out.println(mouseClickedX + " " + mouseClickedY);
            }
 
        }
 
        @Override
        public void mousePressed(MouseEvent e) {
            if (!e.isAltDown() && !e.isMetaDown()) {
                mousePressedX = e.getX();
                mousePressedY = e.getY();
            }
        }
 
        @Override
        public void mouseReleased(MouseEvent e) {
            mouseClickedX = 0;
            mouseClickedY = 0;
            mousePressedX = 0;
            mousePressedY = 0;
 
        }
 
        @Override
        public void mouseEntered(MouseEvent e) {
            mouseClickedX = 0;
            mouseClickedY = 0;
            mousePressedX = 0;
            mousePressedY = 0;
 
            repaint();
 
 
        }
 
        @Override
        public void mouseExited(MouseEvent e) {
            mouseClickedX = 0;
            mouseClickedY = 0;
            mousePressedX = 0;
            mousePressedY = 0;
 
        }
 
    }
 
 
 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.545 из 5
Похожие ответы