Большое спасибо! Я не уверен, почему это вызвало бы проблему, но это полностью решает проблему.

ался создать инструмент пера для моей программы рисования на Java, используя класс Path2D в сочетании с прослушивателями мыши, но у меня были удивительные результаты. Инструмент будет работать в течение нескольких секунд, но затем все приложение замерзнет и его придется закрыть. (Никаких исключений здесь не происходит; программа просто зависает). Вот SSCCE, который демонстрирует проблему:

import java.awt.BasicStroke;
import java.awt.event.MouseAdapter;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.geom.Path2D;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class PenDemoPanel extends JPanel {

    private Point start;
    private Point stop;
    private Shape shape;

    public PenDemoPanel() {
        setBackground(Color.white);
        setPreferredSize(new Dimension(600, 600));
        PathListener listener = new PathListener();
        addMouseListener(listener);
        addMouseMotionListener(listener);
    }

    public void paintComponent(Graphics gc) {
        super.paintComponent(gc);

        Graphics2D g2 = (Graphics2D) gc;

        if (start != null && stop != null) {
            BasicStroke stroke = new BasicStroke(1);
            shape = stroke.createStrokedShape(shape);
            g2.draw(shape);
            g2.fill(shape);
        }

    }

    private class PathListener
        extends MouseAdapter {

        public void mousePressed(MouseEvent event) {
            start = event.getPoint();
            Path2D path = new Path2D.Double();
            shape = path;
        }

        public void mouseDragged(MouseEvent event) {
            stop = event.getPoint();

            Path2D path = (Path2D) shape;
            path.moveTo(start.x, start.y);
            path.lineTo(stop.x, stop.y);
            shape = path;
            start = stop;

            repaint();

        }

        public void mouseReleased(MouseEvent event) {
            Path2D path = (Path2D) shape;
            path.closePath();
            shape = path;
            repaint();
        }
    }

    public static void main(String[] args) {
        PenDemoPanel shapes = new PenDemoPanel();

        JFrame frame = new JFrame("PenDemo");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(shapes);

        frame.pack();
        frame.setVisible(true);
    }
}

Я написал свойPath класс, который отлично работал здесь, но я хотел использовать некоторые дополнительные функции в классе Path2D.

Я что-то не так делаю или Path2D не способен на то, что я пытаюсь сделать?

Любая помощь будет принята с благодарностью.

Ответы на вопрос(1)

Ваш ответ на вопрос