2013-02-20 2 views
3

Мне было дано практическое решение, и оно поставляется с файлом ImageEditor, который я могу показать при необходимости, однако он длинный, поэтому я не разместил его здесь.Ошибка Java Swing

Я должен реализовать сохранить ссылку и дал код, который я хранится в отдельном файле класса:

public class SaveAction extends AbstractAction{ 
    public SaveAction(String text, ImageIcon icon, String desc, Integer mnemonic){ 
     super(text, icon); 
     putValue(SHORT_DESCRIPTION, desc); 
     putValue(MNEMONIC_KEY, mnemonic); 
    } 

    public void actionPerformed(ActionEvent e){ 
     // Just print out a message for now. 
     System.out.println("Save"); 
    } 
} 

, а затем создать экземпляр в главном классе:

Action saveAction = new SaveAction(
    "Save", new ImageIcon("img/save.png"), "Save the image", KeyEvent.VK_S); 

Однако это приходит с ошибкой:

The Constructor SaveAction(String, ImageIcon, String, int) is undefined.

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

+1

Возможно: int мнемонический, по параметрам? –

+2

Указывает 'Integer', но передается' int'. Я удивлен, что авто-бокс не заботится об этом. –

+0

Он делает. Должна быть старая версия Java. –

ответ

3

У вас есть конструктор, как:

public SaveAction(String text, ImageIcon icon, String desc, Integer mnemonic) 

и вы звоните:

new SaveAction("Save", new ImageIcon("img/save.png"), "Save the image",KeyEvent.VK_S); 

ошибка происходит из-за этого:

KeyEvent.VK_S сусло быть int, а не Integer, и у вас есть Integer в качестве последнего аргумента. Так попробуйте изменить его или просто бросить его как new Integer(KeyEvent.VK_S)

+0

Спасибо, отлично работает! – DorianD

0
Action saveAction = new SaveAction("Save", new ImageIcon("img/save.png"), "Save the image", 
KeyEvent.VK_S); 

ли форма вы вызываете метод, но, обратите внимание, что ваш конструктор:

public SaveAction(String text, ImageIcon icon, String desc, Integer mnemonic) 

KeyEvent.VK_S возвращает Int, который является примитивный тип. Ваш конструктор ожидает класс Integer, который похож на int, но, как вы можете видеть, это не примитивный тип, это класс, который имеет методы и атрибуты. Итак, вы можете вызвать свой конструктор следующим образом:

Action saveAction = new SaveAction("Save", new ImageIcon("img/save.png"), "Save the image", 
    new Integer(KeyEvent.VK_S))); 
0

Ваш конструктор нуждается в объекте Integer, а не в примитиве int. В отличие от других решений, я бы посоветовал вам использовать Integer.valueOf вместо new Integer, особенно KeyEvent.VK_S всегда будет представлять собой то же значение INT:

Action saveAction = new SaveAction("Save", new ImageIcon("img/save.png"), "Save the image", Integer.valueOf(KeyEvent.VK_S))); 

См here для более подробной информации.