GetUpdateManager батика Canvas возвращает ноль - PullRequest
0 голосов
/ 27 сентября 2018

При использовании Batik для получения UpdateManager из JSVGCanvas возвращается null.

public void init() {
    canvas = new JSVGCanvas(null, true, false);
    canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
}

public void paint(final DomainObject domainObject) {
    UpdateManager updateManager = canvas.getUpdateManager();
    RunnableQueue runnableQueue = updateManager.getUpdateRunnableQueue();
    runnableQueue.invokeLater(new Runnable() {
        public void run() {
            // Document operations here
        }
    });
}

Как можно исправить эту ошибку?

1 Ответ

0 голосов
/ 27 сентября 2018

Метод рисования должен был быть разделен на две части, одна из которых - регистрация GVTTreeRendererListener для JSVGCanvas объекта.Как только рендеринг завершен, этот слушатель вызывает метод, который выполняет фактическую работу рисования, к тому времени объект UpdateManager присутствует на холсте.

public void init() {
    canvas = new JSVGCanvas(null, true, false);
    canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
}

public void paint(final DomainObject domainObject) {
    canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
        public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
            renderComplete(domainObject);
        }
    });
}

public void renderComplete(DomainObject domainObject) {
    UpdateManager updateManager = canvas.getUpdateManager();
    RunnableQueue runnableQueue = updateManager.getUpdateRunnableQueue();
    runnableQueue.invokeLater(new Runnable() {
        public void run() {
            // Document operations here
        }
    });
}

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Ответ был найден на этом форуме Batik, и ярешил задокументировать его здесь как более полезный ресурс http://batik.2283329.n4.nabble.com/UpdateManager-is-Null-td2974717.html

...