Проблема с вооруженным медвежьим медведем - вызывающий пользовательский класс из 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
Пространство имен).