Ошибка 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;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д