업데이트 : 다소 문제를 해결 한스칼라 객체가 자바에 Class.newInstance 고투()
. MTApplcation 소스 코드를 살펴보면, initialize()
메소드가 인스턴스화 할 클래스 이름에 대한 String 매개 변수를 사용하여 오버로드 될 수 있음을 발견했습니다. 따라서 MTApplication을 확장하고 이름을 전달하는 별도의 클래스를 만들면 모든 것이 올바르게 작동합니다. 자바 라이브러리 (처리를 기반으로 MT4j을)를 사용하는 동안 UPDATE
의
END 나는 스칼라 상황이있다.
Class<?> c = Thread.currentThread().getContextClassLoader().loadClass(name); applet = (PApplet) c.newInstance();
그래서으로이 작품에서 나중에 참조 할 수 : 라이브러리는 응용 프로그램 (발신자 급)의 메인 클래스의 인스턴스를 원한다. 그러나 스칼라 스칼라 클래스는 클래스가 아니라 객체이고 라이브러리 구조로 인해 기본 라이브러리 클래스 MTApplication
의 정적 메서드 initialize()
을 호출해야하기 때문에 실패합니다. Java에서 정적 필드는 클래스에 있지만 Scala - in 객체에 있습니다. 따라서 객체를 인스턴스화하는 것은 불가능하며 라이브러리는 실패합니다. MT4j와 달리, Processing 자체는 시작할 때 정적 메소드를 호출하지 않고 성공적으로 해당 단계를 통과합니다.
방금 동반자 클래스를 만들면 동반자 클래스에서 static initialize()
메서드가 동반자 개체에서 호출되기 때문에 동등 클래스가 초기화되지 않는다는 점을 제외하고는 모든 것이 잘 작동합니다. 클래스 인스턴스는 막 죽은 상태가되고 라이브러리는 사용할 수 없게됩니다. .
적어도이 문제를 이해하는 방법입니다.
는이 오류를 얻을 : 나는 완전히 여기에 무슨 일이 일어나고 있는지 이해하지 않기 때문에 나 또한 설명 할
Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalAccessException: Class processing.core.PApplet can not access a member of class main.Main$ with modifiers "private"
at processing.core.PApplet.runSketch(PApplet.java:9103)
at processing.core.PApplet.main(PApplet.java:9292)
at org.mt4j.MTApplication.initialize(MTApplication.java:311)
at org.mt4j.MTApplication.initialize(MTApplication.java:263)
at org.mt4j.MTApplication.initialize(MTApplication.java:254)
at main.Main$.main(Main.scala:26)
at main.Main.main(Main.scala)
그것은 어렵다. 하지만이 라이브러리를 가진 사람이라면 주 수업을 시작하려고 몇 분 안에 상황을 재현 할 수 있습니다.
앱을 시작하기 위해 구현해야하는 추상 startUp()
메서드는 모든 것을 더 슬퍼 보입니다. 객체를 초기화하지만 라이브러리가 작업하려고하는 것은 스칼라에서 메소드가 객체에 속하기 때문에 초기화되지 않는 컴패니언 클래스의 인스턴스입니다.
내 코드 :
object Main extends MTApplication {
def main(args: Array[String]) {
MTApplication.initialize()
new Main().startUp()
}
//this method is abstarct so it MUST be implemented,
override def startUp(){
}
}
class Main extends MTApplication {
override def startUp(){
//startup here
}
}
내 설명이 모호한 경우 미안 해요, 난 그냥 완전히 모든 것을하지 않습니다. 아마도 내부에서 무슨 일이 일어나고 있는지 미리 링크 된 'core.jar'대신 처리 소스 코드로 MT4j 라이브러리로 실험을 반복하는 것이 더 쉽다는 것을 이해했을 것입니다. Doeas 사람은 여기에 어떤 해결 방법에 대한 아이디어가 있습니까?
저는 흥미가 있습니다. 해결책을 알려주세요. – Jus12
@ Jus12에 소스가 포함되어 있습니다. – noncom