シンプルさと思っていたことを、わかりにくい時間に抱えています。クラスパスに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]
が、私は単純な問題への切り替えを試みた:非アクセスここ
は私のクラスです静的フィールド。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]
が、私はときに、同じ結果を得た私は、REPLからこれを行うことは、問題の原因であるかもしれないという可能性を排除するために、
let
内部でそれをやりました
let
の体内に
(.panel mainFr)
と
(println (. mainFr panel)
を置き換えてください。また、REPLを名前空間
user
に切り替えるときに変更はありません。 (許可されている、これらは壊れた鶏のブードゥーード絶望の動きです)
「emacs slime clojureのようなGoogleのクエリは、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]
ボトムライン:メインフレームのインスタンスを考えると、私はに何をすべきかが必要です静的フィールドまたは非静的フィールドのいずれかにアクセスしますか?何か助けやヒントを提供してくれてありがとう。
あなたは 'public'修飾子を紛失していませんか?現時点では、 'setupModel'にアクセスするためには、同じパッケージに入っている必要があります。 – mre
はい、あなたの問題は有効範囲のようです。 – dseibert