wtorek, 25 maja 2010

Dziwny wyjątek podczas uruchamiania skryptu JavaFX

Wczoraj w zamian za to, że nie mogłem pojawić się na Poznańskim JUGu (trochę się przeziębiłem), zabrałem się za JavaFX. Bardzo mało o tym widzę na (Polskich) blogach, więc stwierdziłem, że może coś poczytam i może coś też popiszę u siebie. Niestety pierwsze wrażenie nie było zbyt miłe :P Przyszło mi walczyć kilka godzin z wyjątkiem który wyglądał jak błąd implementacji czegoś w JavaFX.
Plan był taki aby wziąć jeden z przykładów na stronie JavaFX.com, zmodyfikować i zobaczyć co z tego wyjdzie. Jako środowiska użyłem oczywiście NetBeans IDE w wersji 6.8.
Na komputerze lokalnym mój piękny skrypt działał bez zarzutów (uruchamiałem w trybie run in browser), to samo na serwerze.... do czasu aż nie wyłączyłem NetBeans! Kiedy był wyłączony otrzymywałem w consoli javy taki wyjątek:
java.lang.NullPointerException
at sun.plugin2.applet.JNLP2Manager.initialize(Unknown Source)
at sun.plugin2.main.client.PluginMain.initManager(Unknown Source)
at sun.plugin2.main.client.PluginMain.access$300(Unknown Source)
at sun.plugin2.main.client.PluginMain$2.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Error while initializing manager: java.lang.NullPointerException, bail out
Ten problem występował także na moim laptopie i u znajomych. No to się zaczęło wielkie googlowanie i podmiany SDK/JDK na wszystkie możliwe wersje łącznie z instalacją bety NetBeans 6.9 (swoją drogą zapowiada się bardzo ciekawie!). Nic nie pomogło, nic się nie zmieniło :-/ Ostatecznie poległem i napisałem na forum NetBeans z prośbą o pomoc jakoś przed północą. Do rana nikt nie odpisał, ale dziś gdy wstałem wyjątek już był inny. Konsola zgłaszała, że brakuje pliku xxx_browser.jnlp który na 100% znajduje się zaraz obok JARa. Podejrzałem ten plik, a tam ujrzałem bardzo ładny i krótki XML:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8082/servlet/org.netbeans.modules.javafx.project.JnlpDownloadServlet/I%3A/workspace/NetBeans/WebSiteJavaFx/dist/" href="website_browser.jnlp">
    <information>
        <title>website</title>
        <vendor>wookasz</vendor>
        <homepage href="http://localhost:8082/servlet/org.netbeans.modules.javafx.project.JnlpDownloadServlet/I%3A/workspace/NetBeans/WebSiteJavaFx/dist/"/>
        <description>website</description>
        <offline-allowed/>
    </information>
    <resources>
        <j2se version="1.5+"/>
        <extension name="JavaFX Runtime" href="http://dl.javafx.com/1.3/javafx-rt.jnlp"/>
        <jar href="website.jar" main="true"/>
    </resources>
    <applet-desc name="website" main-class="com.sun.javafx.runtime.adapter.Applet" width="700" height="500">
        <param name="MainJavaFXScript" value="pl.lstachowiak.javafx.website.WebSite"/>
    </applet-desc>
    <update check="always"/>
</jnlp>
No jak widać dwie ścieżki coś nie takie jakie powinny być. Podmieniłem na http://lstachowiak.pl i vuala! Działa!:) plik ostatecznie wygląda następująco:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://lstachowiak.pl/" href="website_browser.jnlp">
    <information>
        <title>website</title>
        <vendor>wookasz</vendor>
        <homepage href="http://lstachowiak.pl/"/>
        <description>website</description>
        <offline-allowed/>
    </information>
    <resources>
        <j2se version="1.5+"/>
        <extension name="JavaFX Runtime" href="http://dl.javafx.com/1.3/javafx-rt.jnlp"/>
        <jar href="website.jar" main="true"/>
    </resources>
    <applet-desc name="website" main-class="com.sun.javafx.runtime.adapter.Applet" width="700" height="500">
        <param name="MainJavaFXScript" value="pl.lstachowiak.javafx.website.WebSite"/>
    </applet-desc>
    <update check="always"/>
</jnlp>
Szkoda, że nigdzie nie wyczytałem wcześniej, że ten plik jest plikiem tekstowym. Z pewnością zajrzałbym tam na początku i oszczędziłoby mi to trochę czasu i nerwów.
Zapraszam na lstachowiak.pl, co prawda nie jest to dzieło sztuki, ale zawsze jakieś początki ;-)

UPDATE:
A jednak ciągle nie działa :-/ Nie rozumiem tego zupełnie. Będę rozwijać wątek jak do czegoś dojdę. Może ktoś ma jakieś sugestie ?

UPDATE2:
Dzięki bardzo Krzysztofowi Kula :) Skompilowałem za pomocą eclipsowej wtyczki i zaczęło działać.

3 komentarze:

  1. Jeśli się nie mylę w Eclipse już jakiś rok temu była dodana opcja określenia domeny dla wynikowej aplikacji, NetBeans nie może się jej doczekać. Próbowałeś może wersję pluginu dla Eclipse? Co prawda nie piszę w chwili obecnej ele ten rozwijany przez Exadel wydaje się być dość szybko rozwijany.

    OdpowiedzUsuń
  2. nie jestem pewny czy to wina IDE. Teraz to na niektórych komputerach działa na niektórych nie. Na moim PC działa (JDK 1.6u20, Windows 7) a na laptopie już nie (to samo co na PC).
    Zgłosiłem to w dwóch miejscach i czekam na odpowiedz.

    Sprawdzę jeszcze tego eclipsa oczywiście, zobaczymy, może coś w tym jest.

    OdpowiedzUsuń
  3. działa!
    Skompilowałem za pomocą wtyczki Eclipsa i śmiga:)

    Dzięki bardzo za pomoc!

    OdpowiedzUsuń