Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 05.11.2012
Сообщений: 25
1

DrawLine. Найти ошибки в программе

10.03.2014, 15:29. Показов 1285. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть метод
Java
1
2
3
4
5
6
7
8
9
10
11
public void paintComponent(Graphics g){
        Graphics g2 = (Graphics2D)g;
        super.paintComponent(g2);
        Square[] square = new Square [8];
        for(int i=0;i<8;i++){
            super.paintComponent(g2);
            g2.drawLine(square[i].segments[i].pointsBegin[i].x, square[i].segments[i].pointsBegin[i].y, square[i].segments[i].pointsEnd[i].x, square[i].segments[i].pointsEnd[i].y); //Ругается на эту строку.
            //g2.drawLine(50, 50, 150, 150); //Если оставляю эту строку вместо верхней, то все нормально.
            
        }
    }
Выдает ошибку в строке g2.drawLine(square[i].segments[i].pointsBegin[i].x, ...
Причем выдает очень много ошибок, половина связанных с repaint.
На всякий случай остальной код
Java
1
2
3
4
5
6
7
8
//class Point
package figure;
 
import java.util.*;
 
public class Point{
   int x,y;
}
Java
1
2
3
4
5
6
7
8
9
//class Segment
package figure;
 
import java.util.*;
 
public class Segment {
      public Point [] pointsBegin;
      public Point [] pointsEnd;
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//class Square 
package figure;
 
import java.util.*;
 
public class Square {
    Segment[] segments;
    public Square(){
        for(int i = 0; i<8;i++){
            segments[i].pointsBegin[i].x = new Random().nextInt(330);
            segments[i].pointsBegin[i].y = new Random().nextInt(180);
            segments[i].pointsEnd[i].x = new Random().nextInt(330);
            segments[i].pointsEnd[i].y = new Random().nextInt(180); 
        }
   }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//class Frame
package figure;
 
import java.awt.*;
 
import javax.swing.*;
 
public class Frame extends JFrame {
    public Frame (){
        setSize(683,384);
        setLocation(341,192);
        setTitle("Squares");
        Panel panel = new Panel();
        Container contentPane = getContentPane();
        contentPane.add(panel);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//class Panel
package figure;
 
import java.awt.*;
 
import javax.swing.*;
 
public class Panel extends JPanel {
    public void paintComponent(Graphics g){
        Graphics g2 = (Graphics2D)g;
        super.paintComponent(g2);
        Square[] square = new Square [8];
        for(int i=0;i<8;i++){
            super.paintComponent(g2);
            g2.drawLine(square[i].segments[i].pointsBegin[i].x, square[i].segments[i].pointsBegin[i].y, square[i].segments[i].pointsEnd[i].x, square[i].segments[i].pointsEnd[i].y);
            //g2.drawLine(50, 50, 150, 150);
            
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//class Figure
package figure;
 
import javax.swing.JFrame;
 
public class Figure {
 
    public static void main(String[] args) {
       Frame frame = new Frame();
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setVisible(true);
       frame.setResizable(false);
    }    
    
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2014, 15:29
Ответы с готовыми решениями:

Найти ошибки в данной программе (известно что есть только 2 ошибки)
У меня в модуле с програмирования задание: Найти ошибки в данной программе (известно что есть...

Найти ошибки в программе
Прошу помогите 1 задание program zadanie1; var x: ^boolean; Y: boolean; begin {a} New(x);...

Найти ошибки в программе
Помогите их исправить, пожалуйста. Файл прикреплен.

Найти ошибки в программе
Всем здравствуйте! Нудно найти ошибки в программе и записать её правильно! Program Errors;...

5
5 / 5 / 1
Регистрация: 04.03.2014
Сообщений: 20
11.03.2014, 20:01 2
Даже не знаю с чего начать..
Java
1
2
class Panel
Square[] square = new Square [8];
это объявление без инициализации, пока не проинициализируете, там будет 8 штук null, скорее всего на это и ругается
Кликните здесь для просмотра всего текста
кстати, было бы понятнее, если бы Вы прикрепили к сообщению текст ошибки, убрав его под теги SPOILER

Далее вообще идёт безобразие
Java
1
2
//class Square 
Segment[] segments;
и всё, Вы даже не указали, на сколько элементов массив и начинаете заполнять его в цикле.
Дальше не смотрел.
Напишите, в чём смысл задания. Интуитивно, чувствуется, что традиционный вывод случайных фигур, но, если возможно - формальное описание было бы лучше.
0
0 / 0 / 1
Регистрация: 05.11.2012
Сообщений: 25
11.03.2014, 22:07  [ТС] 3
Код ошибки.
Кликните здесь для просмотра всего текста

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at figure.Panel.paintComponent(Panel.java:15)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5226)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java: 1529)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452)
at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
at javax.swing.JComponent.paint(JComponent.java:1040)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
at java.awt.Container.paint(Container.java:1967)
at java.awt.Window.paint(Window.java:3877)
at javax.swing.RepaintManager$3.run(RepaintManager.java:819)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7 6)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7 6)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242 )
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150 )
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at figure.Panel.paintComponent(Panel.java:15)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5226)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java: 1529)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452)
at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
at javax.swing.JComponent.paint(JComponent.java:1040)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
at java.awt.Container.paint(Container.java:1967)
at java.awt.Window.paint(Window.java:3877)
at javax.swing.RepaintManager$3.run(RepaintManager.java:819)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7 6)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7 6)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242 )
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150 )
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at figure.Panel.paintComponent(Panel.java:15)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5226)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java: 1529)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452)
at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
at javax.swing.JComponent.paint(JComponent.java:1040)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
at java.awt.Container.paint(Container.java:1967)
at java.awt.Window.paint(Window.java:3877)
at javax.swing.RepaintManager$3.run(RepaintManager.java:819)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7 6)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7 6)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242 )
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150 )
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)


Задание:
Создать приложение, удовлетворяющее требованиям, приведенным в задании. Аргументировать принадлежность классу каждого создаваемого метода и корректно переопределить для каждого класса методы equals(), hashCode(),
toString().
Создать объект класса Квадрат, используя классы Точка, Отрезок.
Методы:
• задание размеров,
• растяжение, сжатие, поворот,
• изменение цвета.
Задание на тему наследования. Изначально делал так: Был класс отрезок(Point), в котором были массивы(а не поля как сейчас)xn,yn (координаты точки). Этот класс наследовал класс отрезок(Segment), в котором создавались еще массивы xk, yk, т.е. получается уже есть начальные координаты точки и конечные. Далее напрягся, не знал что делать с классом квадрат (Square). Думал как можно сгруппировать в нем такие отрезки, по координатам которых, прорисовывая их, получался квадрат. Подошел к преподу спросить, тот говорит, что вообще все неправильно. Оказывается должен был придумать ещё 1 класс, в котором будут массивы объектов класса Point и Segment, потом этот класс будет наследовать класс Square. Потом он сам подошел и начал писать как должно быть. Мне почему то кажется его идея не бредовой, с такими вот потом параметры в методе drawLine(square[i].segments[i].pointsBegin[i].x ...).
И потом не понимаю для чего здесь переопределять методы equals(), hashCode(),toString(). Где в программе можно эти методы применить, что бы как то логично совпадало с самим заданием?
0
37 / 37 / 25
Регистрация: 19.11.2012
Сообщений: 197
11.03.2014, 22:44 4
farshmaker,
Java
1
Square[] square = new Square [8];
массив то создали, а заполнять его кто будет?
0
0 / 0 / 1
Регистрация: 05.11.2012
Сообщений: 25
12.03.2014, 00:21  [ТС] 5
Что-то я запутался в инициализации сквозь столько конструкторов) Получается nullpointerexception. Помогите разрулить. На данный момент вот что получилось.
Java
1
2
3
4
5
6
7
8
9
10
11
package figure;
 
import java.util.*;
 
public class Point{
   int x,y;
   public Point(int x, int y){
       this.x = x;
       this.y = y;
   }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
package figure;
 
import java.util.*;
 
public class Segment {
      public Point [] pointsBegin;
      public Point [] pointsEnd;
 
    Segment(int xn, int yn, int xk, int yk, int i) {
        pointsBegin[i].x = xn;
        pointsBegin[i].y = xn;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
package figure;
 
import java.util.*;
 
public class Square {
    Segment[] segments = new Segment [8];
    public Square(){
        for(int i = 0; i<8;i++){
            segments[i]=new Segment (new Random().nextInt(330),new Random().nextInt(180),new Random().nextInt(330),new Random().nextInt(180),i);           
        }
   }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package figure;
 
import java.awt.*;
 
import javax.swing.*;
 
public class Panel extends JPanel {
    public void paintComponent(Graphics g){
        //int [] x = new int[]{10,30,50,60,135,200};
        //int [] y = new int[]{10,30,55,65,130,185};
        Graphics g2 = (Graphics2D)g;
        super.paintComponent(g2);
        Square[] square = new Square [8];
        for(int i=0;i<square.length-1;i+=2){  
            square[i] = new Square();
            g2.drawLine(square[i].segments[i].pointsBegin[i].x, square[i].segments[i].pointsBegin[i].y, square[i].segments[i].pointsEnd[i].x, square[i].segments[i].pointsEnd[i].y);
            //g2.drawLine(x[i], y[i], x[i+1], y[i+1]);            
        }
    }
}
0
5 / 5 / 1
Регистрация: 04.03.2014
Сообщений: 20
12.03.2014, 07:02 6
Будьте последовательны. Во всех трёх кусках кода ошибки
Java
1
2
3
4
5
6
7
8
public class Segment { 
     public Point [] pointsBegin; 
     public Point [] pointsEnd; 
     Segment(int xn, int yn, int xk, int yk, int i) { 
          pointsBegin[i].x = xn; 
          pointsBegin[i].y = xn; 
     } 
}
Массивы pointsBegin и pointsEnd только объявлены. У них ещё даже размера нет, а вы уже по индексу к ним обращаетесь.
Java
1
2
3
4
5
public class Square {
    Segment[] segments = new Segment [8];
    public Square(){
        for(int i = 0; i<8;i++){
           ...
вот тут уже лучше, но это только объявление с указанием размера, по-прежнему попадаете на java.lang.NullPointerException, как только попробуете к ним обратиться.
Ну и
Java
1
Square[] square = new Square [8];
понятно, да?
Рекомендую повторить инициализацию массивов (это не долго, а жизнь легче станет) и учитесь читать сообщения об ошибках)

Добавлено через 7 минут
Процитирую "Ошибки начинающих java-программистов"

3. Забыл проинициализировать объекты, являющиеся элементами массива.
В Java массив объектов - это на самом деле массив ссылок на объекты. Создание
массива - это просто создание набора ссылок, ни на что не указывающих (то
есть равных null). Чтобы на самом деле создать "полноценный" массив
объектов, необходимо проинициализировать каждый элемент массива. Многие
студенты не понимают этого; они считают, что, создавая массив объектов, они
автоматически создают сами объекты. (В большинстве случаев, студенты
приносят эту концепцию из C++, где создание массива объектов приводит к
созданию самих объектов путем вызова их конструктора по умолчанию).

В примере ниже, студент хочет создать 3 объекта класса StringBuffer. Код
будет откомпилирован без ошибок, но в последней строке произойдет
исключение NullPointerException, где происходит обращение к несуществующему
объекту.
Ошибочный пример:
Java
1
2
3
4
// Создаем массив из StringBuffer
StringBuffer [] myTempBuffers;
myTempBuffers = new StringBuffer[3];
myTempBuffers[0].add(data);
Чтобы не допускать эту ошибку, необходимо не забывать проинициализировать
элементы массива.

Исправленный пример:
Java
1
2
3
4
5
6
7
// Создаем массив из StringBuffer и инициализируем элементы
StringBuffer [] myTempBuffers;
myTempBuffers = new StringBuffer[3];
for (int ix = 0; ix < myTempBuffers.length; ix++) 
     myTempBuffers[ix] = new StringBuffer();
 
myTempBuffers[0].add(data);
1
12.03.2014, 07:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2014, 07:02
Помогаю со студенческими работами здесь

Найти ошибки в программе
Ребята помогите пожалуйста найти ошибки, программа простая с математическими уравнениями, проблема...

Найти ошибки в программе
clc; clear; clear all; %% Начальные данные n=2; u=4; m=4; N=u^n;

Найти ошибки в программе
Помогите! Правильно ли составлена программа? Даны действительные числа а1..,а64.Получит...

Найти ошибки в программе
Попытки сделать первое задание не увенчались успехом, просьба помочь,исправить вот ссылка с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru