Пользовательский курсор Java не будет работать на новом компьютере

1

Недавно я купил новый компьютер, и я перевел свои проекты с моего старого на новый. Я сделал компиляцию по всем моим проектам, и все они отлично работали, и большинство из них все еще работают на моем новом компьютере, но в одном проекте, в частности, не будет отображаться пользовательский курсор, который я переместил. Я убедился, что я перенес картину с проектом, чтобы это исключить. Я переписал источник, чтобы соответствовать новому местоположению на моем новом компьютере, но он все равно не будет отображаться. Это дает мне сообщение об ошибке:

Exception in thread "main" java.lang.IndexOutOfBoundsException: invalid hotSpot
    at sun.awt.CustomCursor.<init>(Unknown Source)
    at sun.awt.windows.WCustomCursor.<init>(Unknown Source)
    at sun.awt.windows.WToolkit.createCustomCursor(Unknown Source)
    at wtalfvn.Window.<init>(Window.java:32)
    at wtalfvn.Main.main(Main.java:9)

Мой старый компьютер 32-битный, а мой новый - 64-разрядный, оба работают в Windows 7, я использую eclipse Kepler, но имеет ли значение при использовании Cursor и Toolkit?

Вот мой код, который я использовал для создания своего курсора

Image cursor = Toolkit.getDefaultToolkit().getImage("graphx/PNG/cursor.png");
Cursor c = Toolkit.getDefaultToolkit().createCustomCursor(cursor,new Point(this.getX(),this.getY()), "cursor");
this.setCursor(c);

EDIT: Вот код для тех, кто хочет его увидеть.

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class Window extends JFrame{

Image ico= Toolkit.getDefaultToolkit().getImage("graphx/ico/icon.PNG");

TextBox tb=new TextBox();

public Window(){
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(800,600);
    setVisible(true);
    setFocusable(true);
    getContentPane().setBackground(Color.BLACK);
    setIconImage(ico);
    setLocationRelativeTo(null);
    setResizable(false);
    setTitle("MYTITLE");
    addKeyListener(new KeyAdapter(){
        public void keyTyped(KeyEvent e) {
            if (e.getKeyChar()==KeyEvent.VK_ESCAPE){
                System.exit(0);
            }
        }
    });
    Image cursor = Toolkit.getDefaultToolkit().getImage( getClass().getResource("/graphx/PNG/cursor.png"));
    Cursor c = Toolkit.getDefaultToolkit().createCustomCursor(cursor,new Point(this.getX(),this.getY()), "cursor");
    setCursor(c);
}
}
  • 0
    Добро пожаловать в переполнение стека! Подумайте над тем, чтобы предоставить действительный работоспособный пример, который демонстрирует вашу проблему , потребует меньше работы по угадыванию и лучших ответов
  • 0
    Весь остальной код работает, поэтому я решил не беспокоить вас, ребята, скопировав весь мой код просто для того, чтобы добраться до виновника. Окно работает, пользовательский значок работает, все работает, кроме курсора.
Показать ещё 5 комментариев
Теги:

1 ответ

0
Лучший ответ

Горячая точка курсора должна относиться к изображению курсора...

Вероятная причина заключается в том, что заданные координаты x/y находятся за пределами видимого диапазона изображения...

 Cursor c = Toolkit.getDefaultToolkit().createCustomCursor(cursor,new Point(this.getX(),this.getY()), "cursor");

Например, если предположить, что следующий курсор 32x32 пикселя...

Изображение 174551

Горячая точка курсора будет около 26x0, это будет точка, в которой будут запускаться события мыши, и Point MouseEvent будет зарегистрирована как имеющая место

Другая возможность заключается в том, что изображение на самом деле не загружено...

Image cursor = Toolkit.getDefaultToolkit().getImage("graphx/PNG/cursor.png");

getImage ожидает, что значение представляет собой местоположение файла, которое в этом примере означает, что файл должен быть относительно местоположения, в котором была выполнена программа

Если изображение на самом деле является встроенным ресурсом, вы должны использовать

Image cursor = Toolkit.getDefaultToolkit().getImage(
    getClass().getResource("/graphx/PNG/cursor.png"));

или симулятор для загрузки изображения.

Вы можете протестировать это с помощью ImageIO.read поскольку это вызовет IOException если изображение не может быть загружено по какой-либо причине

  • 0
    Хорошо, я избавился от параметров getX () и getY (), и это все еще делает то же самое ... Я сделал getClass (). GetResource () и все же ничего. Из изучения моего кода (и это весь код, отличный от класса Main, где я собираю все свои конструкторы в главной функции), что вы можете сказать, что нужно исправить?
  • 0
    Где хранится изображение? Это в контексте приложения Jar или хранится снаружи в файловой системе
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню