У меня есть необъяснимо трудное время, делая что-то, что я считал самой простотой. У меня есть JAR-файл в моем пути к классам. Я в Emacs, используя SLIME REPL, и я пытаюсь получить доступ к статическому полю экземпляра класса Java (один в JAR).Проблема с доступом к статическому полю класса Java
Вот мой класс:
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
, чтобы исключить возможность того, что делает это из РЕПЛ может быть источником проблемы:
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', вам нужно быть в одном пакете. – mre
Да, ваша проблема кажется областью. – dseibert