Мне необъяснимо трудно делать то, что я считал простотой. У меня есть файл JAR на моем пути к классам. Я нахожусь в Emacs, использую SLIME REPL, и я пытаюсь получить доступ к статическому полю экземпляра класса Java (один внутри JAR).
Вот мой класс:
public class MainFrame extends JFrame implements WindowListener,
TreeSelectionListener {
JPanel panel;
InfocardWindow infoWindow;
InfocardBuilder infocardBuilder;
Main infomlFile;
static NotecardModel setupModel;
...
Когда я попробовал:
infwb.cardmaker> (import 'javax.swing.JFrame)
javax.swing.JFrame
infwb.cardmaker> (import 'org.infoml.infocardOrganizer.MainFrame)
org.infoml.infocardOrganizer.MainFrame
infwb.cardmaker> MainFrame/setupModel
; Evaluation aborted.
Сообщение об ошибке было:
Unable to find static field: setupModel in class org.infoml.infocardOrganizer.MainFrame
[Thrown class java.lang.Exception]
Я попытался переключиться на более простую задачу: получить доступ к нестатическому полю. Я сделал это внутри let
, чтобы исключить возможность того, что выполнение этого из REPL может быть источником проблемы:
infwb.cardmaker> (let [mainFr (MainFrame.)]
(println (.panel mainFr)))
; Evaluation aborted.
Сообщение об ошибке было:
No matching field found: panel for class org.infoml.infocardOrganizer.MainFrame
[Thrown class java.lang.IllegalArgumentException]
Тот же результат получил при замене (.panel mainFr)
и (println (. mainFr panel)
в теле let
. Кроме того, никаких изменений при переключении REPL на пространство имен user
. (Конечно, это отчаяние вуду-тряски курицы.)
Запросы Google, такие как «emacs slime clojure не удается получить доступ к полю класса Java, ошибка« Невозможно найти статическое поле »» не дают ничего полезного - большинство из них связано с попыткой вызова методов класса Java (без доступа к полям класса Java).
Чтобы быть внимательным, я попробовал:
user> (let [mainFr (MainFrame.)]
MainFrame/setupModel)
; Evaluation aborted.
Сообщение об ошибке было, как и раньше:
Unable to find static field: setupModel in class org.infoml.infocardOrganizer.MainFrame
[Thrown class java.lang.Exception]
Итог: учитывая экземпляр MainFrame, что мне нужно сделать для доступа к статическому или нестатическому полю? Спасибо за любую помощь или подсказки, которые вы можете предоставить.
public
? на данный момент, чтобы получить доступ кsetupModel
, вы должны быть в одном пакете. - person mre   schedule 19.06.2011