Java로 작성된 클래스 라이브러리가 있고 Javascript로 변환하려고합니다. 모든 메소드는 매우 간단하며 주로 콜렉션을 조작해야합니다. 이 클래스를 인스턴스화 할 수있는 GameControl이 있으며이 메소드를 페이지의 다른 Javascript 코드에 노출 시키길 원합니다.GWT의 클래스 기능을 노출하는 방법
GWT를 사용하려고 생각했습니다. 컴파일하는 GWT에서 실행중인 프로젝트가 있지만 GameControl 클래스의 인스턴스 (+ 기능)를 노출하는 방법을 알 수 없습니다.
제 생각에는 JSNI를 사용하여 객체를 노출시켜야한다고 생각했지만 그렇지 않았습니다. 이가 지금처럼 보이게하는 방법의 짧은 버전입니다 :
GameEntryPoint.java
import com.google.gwt.core.client.EntryPoint;
public class GameEntryPoint implements EntryPoint {
private GameControl _gameControl;
@Override
public void onModuleLoad() {
_gameControl = new GameControl();
expose();
}
public native void expose()/*-{
$wnd.game = [email protected]::_gameControl;
}-*/;
}
GameControl.java는
package game.client;
public class GameControl {
public boolean isEmpty(int id){
// does stuff...
return true;
}
}
그래서, GWT는 실제로 코드를 컴파일하고, GameControl_0
개체가 생성되어 $wnd.game
에 설정되어 있지만 어떤 방법도 찾을 수 없다는 것을 알았습니다.
내 예상 최종 결과는 의 인스턴스로 window.game
이되며 모든 공개 메서드는 GameControl
노출입니다.
어떻게하면됩니까? window
속성을 노출하는 JSNI를 사용하여 @jusio
의 응답으로 당
편집 는 명시 적으로 일했다,하지만 너무 자세한이었다. 나는 gwt-exporter 해결책을 시도하고있다. 지금은
GameEntryPoint.java
package game.client;
import org.timepedia.exporter.client.ExporterUtil;
import com.google.gwt.core.client.EntryPoint;
public class GameEntryPoint implements EntryPoint {
@Override
public void onModuleLoad() {
ExporterUtil.exportAll();
}
}
RoadServer.java이
package game.client;
import org.timepedia.exporter.client.Export;
import org.timepedia.exporter.client.ExportPackage;
import org.timepedia.exporter.client.Exportable;
@ExportPackage("game")
@Export("RoadServer")
public class RoadServer implements Exportable {
int _index;
int _id;
public RoadServer(int index,int id){
this._id=id;
this._index=index;
}
}
여전히 코드 중 어느 것도 수출되지 않는다 (특히하지 RoadServer
)이있다.
죄송합니다. 첫 번째 해결책은 효과가 있었지만 실제로는 매우 장황합니다. 나는'gwt-exporter'를 일하게 할 수 없다. 나는이를 외부 JAR 파일로 프로젝트에 추가하고'GameEntryPoint' XML 모듈 파일을 수정하여'org.timepedia.exporter.Exporter'에서 상속 받고'export' 값을'yes'로 설정하고 마지막으로' 내 프로젝트의 모든 클래스에 '내보내기 가능'인터페이스를 제공하지만 여전히 GWT 컴파일은 코드를 생성하지 않습니다.나는 또한'@ Export' 주석을 일부에 추가하려고 시도했다. 내가 뭘할지 생각 해봐? – Yuval
@Yuval 또한 엔트리 포인트 어딘가에'ExporterUtil.exportAll();'을 호출해야만 프레임 워크가 실제로 클래스를 노출 할 것입니다. – jusio
이것을 추가 한 후에 아무 것도 바뀌지 않았습니다. 내 코드를 처리하는 중에 gwt-exporter가 오류가 발생했을 수 있습니까? 작동하는 동안 gwt-exporter가 작동하는 것을 볼 수있는 방법이 있습니까? – Yuval