Проблема с вооруженным медвежьим медведем - вызывающий пользовательский класс из repl?

Я очень плохо знаком с LISP и довольно плохо знаком с Java. Я работал над тривиальной игрой в java, и я подумал, что было бы интересно взаимодействовать с игрой, поскольку я кодировал ее через REPL. Я следовал Практическому Общему Лиспу и знаю основы структуры функций. Я начал использовать общий lisp с вооруженным медведем - реализацию, которая работает на виртуальной машине Java, - и смог написать некоторые базовые функции для создания графического интерфейса, такие как:

(defconstant +jframe+ "javax.swing.JFrame")

(defun make-frame (length width &key visible)
  "Create a +jframe+"
  (let ((frame (jnew (jconstructor +jframe+))))
    (jcall (jmethod +jframe+ "setSize" "int" "int")
       frame length width)
    (if visible (frame-is-visible t frame))
    frame))

Однако я не могу понять, как получить доступ к пользовательским классам из lisp. Реализация в целом выглядит довольно плохо документированной, и я испытываю трудности с использованием java-приложений изнутри lisp. Например, у меня есть класс скомпилированных символов под названием "Символ". Но когда я вызываю (jclass "Character"), я получаю ошибку "class not found". Можно ли сделать так, чтобы abcl узнал о моих занятиях изнутри lisp?

1 ответ

Решение

Если вы хотите создать экземпляр класса Java, который вы написали сами и который упакован в файл jar, используйте add-to-classpath:

(add-to-classpath '("Character.jar"))

Затем, (jnew "org.example.Character") должен дать вам экземпляр вашего Character класс (при условии, что это в org.example Пространство имен).

Другие вопросы по тегам