JS w Javie

0

Najprostszy przypadek. Od niego zacznę pytanie. Jak zrobić, żeby w javie z utworzonym okienkiem, Jpanelem i czymkolwiek innym udało się dodać taki kod JavyScript, który działałby na jakimś obiekcie z Javy jak np. na DIVie w HTML, czyli mógłby rysować, wyświetlać itd.

Docelowo chodzi o to, jak połączyć Google Maps JavaScript v3 z Javą, czyli jak przy pomocy kodu JavyScript wyświetlić coś w oknie Javy... Wszędzie tylko ten JXBrowser ale to poszukuję czegoś Free.

Dlatego będę wdzięczny za jakąkolwiek pomoc, bo siedzę już tydzień i mam dość. Co za ... zrobić API do JS a nie do Javy... Chyba że o czymś nie wiem, ale API do Javy było ale już nie jest...

3

w javaFX jest webView, obsluguje js, moze wystarczy do twoich potrzeb

0

Wielkie dzięki. Działa.

Ale dwie muszę powiedzieć. Java byłaby fajniejsza, gdyby nie jej za duża elastyczność wprowadzająca taki zamęt, że nie da się tego opisać. Jeśli zaś chodzi o googla, to bałagan tam jest taki, że też nie ma co komentować. Skoro można użyć webview to taki kod powinien być na początku dokumentacji google maps. Ale nie, jest wszystko, tylko nie to.

0

To złe wrażenie, bo wiem co to Java i co JavaScript, gdyby nie to, to nie szukałbym sposobu na powiązanie jednego i drugiego. Google Maps udostępnia API dla JS i tam coś jeszcze można znaleźć. Ale chcąc zrobić coś w Javie z Google Maps to trzeba było sporo się nakombinować, bo dokumentacja Google Maps niby uwzględnia javę, ale nie bardzo, najnowsze API jest dla JavyScript. Dla Javy to niby jest, ale nic nie działa (łącznie z przykładami). Dla JavyScript działa. A więc pozostało tylko pytanie jak wcisnąć coś z JavyScript do Javy. No i tutaj możliwości było kilka, ale niektóre płatne, niektóre tak udokumentowane, że nie wiem co się dzieje. webview tutaj pomógł bardzo ładnie, jest darmowy i było mało pisania, żeby wyświetlić coś z html.

0

Odwołuje, że WebView działa. Działa przez chwilę i przestaje. Problem "Outstanding resource locks detected", znany z javafx i do teraz nie usunięty, więc WebView jest do niczego.

Nashorn... sam interpreter to jedno, ale jak nie interpretuje też HTML to nic nie wyświetlę.

1

Browser + BrowserFunction chyba najlepszy sposób na komunikację java z js. Korzysta z domyślnej przeglądarki systemowej.
Wywołanie funkcji js z poziomu java ( przykład ):

private double testValue = 0;
//...
browser = new Browser( this, SWT.NONE );
//...

public void getAlert(){
    browser.evaluate("testMethod();");
}

private void createBrowserFunctions(){
    new BrowserFunction(browser, "onTestValueChanged"){
        public Object function(Object[] arguments){
        syncTest((Double)arguments[0]);
        return null;
    }
  };
}

private void syncTest(final Double testValue){
    if (this.testValue != testValue.doubleValue()){
        this.testValue = testValue.doubleValue();
        fireTestValueChanged();
    }
}

private void fireTestValueChanged(){
    Object[] allListeners = listeners.getListeners();
    for(int i = 0; i < allListeners.length; i++){
         // Interfes zawierający testChanged.
         TestListener listener ( TestListener )allListeners[i];
         listener.testChanged();
    }
}

JS:

var testValue = 0;

window._blockEvents = false;

window.testMethod = function(){
   window._blockEvents = true;
   window.alert("Test!");
   testValue = 5;
   window._blockEvents = false;
}

window._handleTestChanged = function(){
      if( !_blockEvents ) {
    // BrowserFunction:
    onTestValueChanged( testValue );
  }
};

Mam nadzieję, że niczego nie namieszałem w powyższym kodzie pisany z palca.

Jeżeli chodzi o fx to tak jak koledzy wyżej wspomnieli WebBrowser także sprawdzi się wyśmiecie, chociaż ma pewne ograniczenia dotyczące wtyczek i nie wiem jak tam jest z komunikacją dwukierunkową.

0

WebBrower (WebView chyba) z fx się nie sprawdził. Parę razy przybliżysz, oddalisz mapkę googla i zanika kontakt. Do bardziej prymitywnych się nadaje, ale do tego odpadł. Zresztą nie tylko ja miałem z tym problem. Gdzieś pisali, że trzeba czekać na poprawki w javie 9, więc pozostawie to bez komentarza.

Jeśli chodzi o Browser to zdecydownie pewnie byłby lepszy, gdyby nie to, że to musi być free, a jeśli Cię dobrze rozumiem, to masz na myśli tę klasę Browser co to kosztuje i to sporo.

Więcej o javie nie znalazłem :/

0

Nie mówiłem, że SWT.Browser, dlatego właśnie liczyłem, że ktoś poda, o który Browser chodzi. Jest jeszcze jeden Browser, płatny. Sprawdzę SWT.

0

Ok, Browser może i działa, ale stwierdziłem, że jak to ma działać w javie to chyba prościej i bardziej uczciwie będzie to napisać w C++ i wykorzystać OLE. Trochę pisania było, bo nigdy z OLE nie korzystałem, więc roboty było, ale czyste WinAPI poszło elegancko. Działa mapka w zwykłym okienku. Niepotrzebnie tylko marnowałem tyle czasu na Jave.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0