import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;

public class CustomCursorHotspot {
    public static void main(String[] args)
    {
        Dimension bestCursorSize = Toolkit.getDefaultToolkit().getBestCursorSize(32, 32);
        assert bestCursorSize.width == bestCursorSize.height;

        final int cursorSize = 32; // this triggers the bug

        //final int cursorSize = bestCursorSize.width; // this is the workaround

        // construct framed haircross
        BufferedImage bufferedImage = new BufferedImage(cursorSize, cursorSize, BufferedImage.TYPE_INT_ARGB);
        Graphics2D bg = bufferedImage.createGraphics();
        bg.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.0f));
        bg.clearRect(0, 0, cursorSize, cursorSize);
        bg.setColor(Color.BLACK);
        bg.drawRect(0, 0, cursorSize - 1, cursorSize - 1);
        bg.setStroke(new BasicStroke(2));
        bg.drawLine(cursorSize / 2, 0, cursorSize / 2, cursorSize);
        bg.drawLine(0, cursorSize / 2, cursorSize, cursorSize / 2);

        Frame frame = new Frame();
        frame.setCursor(Toolkit.getDefaultToolkit().createCustomCursor(
                bufferedImage, new Point(cursorSize / 2, cursorSize / 2), "haircross"));
        frame.setSize(new Dimension(500, 500));
        frame.setVisible(true);

        frame.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                Graphics graphics = frame.getGraphics();
                graphics.setColor(Color.RED);
                graphics.drawRect(e.getX() - 1, e.getY() - 1, 3, 3);
            }

            @Override
            public void mousePressed(MouseEvent e) { }
            @Override
            public void mouseReleased(MouseEvent e) { }
            @Override
            public void mouseEntered(MouseEvent e) { }
            @Override
            public void mouseExited(MouseEvent e) { }
        });
    }
}