Avatar billede kkaen Nybegynder
06. oktober 2009 - 10:15 Der er 27 kommentarer og
1 løsning

Kalde en applet gennem aspx

Jeg har lavet et lille java-spil i Netbeans. Nu vil jeg gerne give adgang til java-spillet gennem en applet i i aspx-side i Visual Studio 2008.

Jeg har lavet en jar-fil bestående af alle de nødvendige java-class-filer samt af en manifest-fil, som indeholder linien "Main-Class: Collision.class".
Aspx-siden indeholder dette script til at vise spillet:
<script type="text/javascript" src="http://www.java.com/js/deployJava.js"></script>
    <script type="text/javascript">
        var attributes = { code:'components.Collision',  width:300, height:300} ;
        var parameters = {jnlp_href: '\\JavaSpil\\javaspil.jnlp'} ;
        deployJava.runApplet(attributes, parameters, '1.6');
    </script>

Men når jeg forsøger at vise siden med spillet på, kommer denne fejl i Java Console:
exception: JNLP file error: \JavaSpil\javaspil.jnlp. Please make sure the file exists and check if "codebase" and "href" in the JNLP file are correct..
java.io.FileNotFoundException: JNLP file error: \JavaSpil\javaspil.jnlp. Please make sure the file exists and check if "codebase" and "href" in the JNLP file are correct.
    at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.io.FileNotFoundException: JNLP file error: \JavaSpil\javaspil.jnlp. Please make sure the file exists and check if "codebase" and "href" in the JNLP file are correct.

Jeg har også prøvet at få diverse andre fejl, men det skyldes nok, at jeg ikke havde kaldt java-filen korrekt.

Min JavaSpil.jnlp ser således ud:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
    <information>
        <title>JavaSpil</title>
        <vendor>JavaSpil</vendor>
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.6+"
              href="http://java.sun.com/products/autodl/j2se" />
        <jar href="javaspil.jar" main="true" />
    </resources>
    <applet-desc
        name="JavaSpil"
        main-class="components.Collision"
        width="300"
        height="300">
    </applet-desc>
    <update check="background"/>
</jnlp>       

Er der nogle, som kan hjælpe mig med dette lille problem?
Avatar billede kkaen Nybegynder
06. oktober 2009 - 11:05 #1
Jeg har nu signet jar-filen, men resultattet bliver det samme...
Avatar billede arne_v Ekspert
07. oktober 2009 - 01:41 #2
Fejlmeddelsen er vel egentligt rimeligt klar.

Fejlen ligger i:

var parameters = {jnlp_href: '\\JavaSpil\\javaspil.jnlp'} ;

Den skal være:

var parameters = {jnlp_href: 'javaspil.jnlp'} ;

hvis javaspil.jnlp ligge i samme path som siden eller:

var parameters = {jnlp_href: 'http://www.xxx.dk/JavaSpil/javaspil.jnlp'} ;

hvis den ligger et andet sted.

Men det er URL syntax ligesom med diverse HTML HREF'er !
Avatar billede kkaen Nybegynder
20. oktober 2009 - 14:08 #3
Jeg har nu lavet en hel del med denne applet. Jeg har også forsøgt uden en jnlp-fil, men nu er jeg gået tilbage til jnlp-fremgangsmåden.
Når jeg tilgår siden, hvor appleten forefindes, får jeg denne fejl:

java.lang.NoClassDefFoundError: AppletFromScratch (wrong name: javaapplication1/AppletFromScratch)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.lang.NoClassDefFoundError: AppletFromScratch (wrong name: javaapplication1/AppletFromScratch)

Min applet hedder "AppletFromScratch", og den ligger i jar'en i bibliotekket "/javaapplication1/javaapplication1.jar", mens jnlp-filen ligger i bibliotekket "/Jnlp/" på serveren.

Jnlp-filen ser således ud:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="AppletFromScratch" href="/Jnlp/fileJnlp.jnlp">
    <information>
        <title>JavaSpil</title>
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.6+"
              href="http://java.sun.com/products/autodl/j2se" />
        <jar href="fileJnlp.jar" main="true" />
    </resources>
    <applet-desc
      documentBase="/Jnlp/javaapplication1.jar"
      name="TimePilot"
      main-class="javaapplication1.AppletFromScratch"
      width="527"
      height="428">
    </applet-desc>
    <security>
        <all-permissions/>
    </security>
</jnlp>       

Jeg har testet appletfromscratch.java i NetBeans ved at højreklikke på filen og vælge "kør". Herefter starter appletten korrekt op.

Altså ligger problemet vist i, at der ikke refereres korrekt ind i jar-filen...eller andet. Med andre ord: jeg er lost...?
Avatar billede arne_v Ekspert
20. oktober 2009 - 15:22 #4
Indeholder din jar fil en entry:

javaapplication1/AppletFromScratch.class

?

AppletFromScratch.class

duer ikke !
Avatar billede kkaen Nybegynder
21. oktober 2009 - 11:40 #5
Jeg ved ikke, hvad en "entry" er. Men AppletFromScratch.class ligger i mappen "javaapplication1".

Jeg har lige læst et sted på nettet, at java interpreteren ikke tillader jar's af sikkerhedsgrunde, som begynder med navnet "java...". Kan dette have noget på sig? Eller er det kun java 1.2 (der stod nemlig nogle referencer dertil, men det stod ikke detaljeret nok) ?
Avatar billede kkaen Nybegynder
21. oktober 2009 - 11:54 #6
Næh, det var vist ikke jar'en med det navn. Det var package'en med det navn, som var problemet?
Avatar billede arne_v Ekspert
21. oktober 2009 - 14:57 #7
entry = det inden i jar filen

prøv med:

jar tvf blabla.jar

i command prompt (eller hvis du har winzip eller lignende så åben jar'en med den)
Avatar billede kkaen Nybegynder
21. oktober 2009 - 15:05 #8
Jeg har winrar. Men jar'en er jo pakket korrekt. Jeg har oprettet jar'en via prompten. Indholdet af pakken er:

META-INF->MANIFEST.MF
javaapplication1->alle classerne og billeder i png-format.
Avatar billede arne_v Ekspert
21. oktober 2009 - 15:16 #9
Og første linie i .java filen er:

package javaapplication1;

?
Avatar billede kkaen Nybegynder
21. oktober 2009 - 17:25 #10
Lige nøjagtig. Den første linie i alle klasserne er:
package javaapplication1;
Jeg har også prøvet, at sætte alle klasserne ind i den første klasse, som kaldes - altså AppletFromScratch.class. Så kunne det jo være, at man blot kunne benytte url'en til den enkelte klasse, hvorved man ikke skulle igennem alt det med "jar". Jeg går ud fra, at "jar"-tingen er årsagen til problematikken her...
Avatar billede arne_v Ekspert
21. oktober 2009 - 22:28 #11
Der er et eller andet som ikke stemmer.

Er det muligt tilgå appletten fra internet eller få en kopi af jar filen ?
Avatar billede kkaen Nybegynder
22. oktober 2009 - 08:20 #12
Ja, naturligvis. HVor skal jeg sende jar'en hen?
Avatar billede arne_v Ekspert
22. oktober 2009 - 15:49 #13
Hvis du klikke rpå mit navn står der min email adresse.
Avatar billede kkaen Nybegynder
23. oktober 2009 - 13:11 #14
Så er jar-filen sendt...
Avatar billede arne_v Ekspert
23. oktober 2009 - 15:37 #15
Lidt mystisk.

Lige netop AppletFromScratch er korrekt.

Alle de andre klasser ligger i dir i jar men klasserne er ikke i package (fejl).
Avatar billede kkaen Nybegynder
23. oktober 2009 - 17:37 #16
Er de ikke i package? Hmm, hvordan kan du se det? Har du back-engineered dem? ;-)
Ej, det kan godt være, at jeg ikke har lagt dem i en package nu. Men så burde alle sammen være uden en package. Grunden til at dette måske forekommer er, at jeg naturligvis har forsøgt mig lidt frem. Og da package-navnet er en del af stien i fejlmeddelelsen ved åbning af appletten, så har jeg forsøgt at lægge klasserne uden for en package - selvom de naturligvis SKAL være i en package ifølge syntaxen for det nyeste metode til kald af applet gennem .NET.
Kan du få det til at virke, hvis de alle sammen ligger i samme package?
Avatar billede arne_v Ekspert
24. oktober 2009 - 03:59 #17
Ja - jeg decompilede.

Alle Java klasser skal være i den package og i dir inden i jar filen.

Men jeg tror at det største problem er JNLP filen.

Den er ret rodet med hensyn til navne og dir.

Jeg laver lige et simpelt eksempel som virker og som du så kan arbejde videre på.
Avatar billede arne_v Ekspert
24. oktober 2009 - 04:02 #18
MyApplet.java:


package mypackage;

import java.awt.*;
import javax.swing.*;

public class MyApplet extends JApplet {
  public void init() {
      getContentPane().setLayout(new BorderLayout());
      getContentPane().add(new JLabel("This shit works"), BorderLayout.CENTER);
  }
}


Package matcher placering inden i jar filen:

C:\>jar tvf myjar.jar
    0 Fri Oct 23 21:47:00 EDT 2009 META-INF/
    68 Fri Oct 23 21:47:00 EDT 2009 META-INF/MANIFEST.MF
  600 Fri Oct 23 21:47:00 EDT 2009 mypackage/MyApplet.class

myjnlp.jnlp:


<?xml version="1.0" encoding="UTF-8"?>
<jnlp href="myjnlp.jnlp">
    <information>
        <title>Applet via JNLP demo</title>
        <vendor>Arne</vendor>
    </information>
    <resources>
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se" />
        <jar href="myjar.jar" main="true" />
    </resources>
    <applet-desc name="JNLP demo" main-class="mypackage.MyApplet" width="600" height="400">
    </applet-desc>
</jnlp>


myhtml.html:


<script src="http://www.java.com/js/deployJava.js"></script>
<script>
    var attributes = { code:'mypackage.MyApplet',  width:600, height:400} ;
    var parameters = {jnlp_href: 'myjnlp.jnlp'} ;
    deployJava.runApplet(attributes, parameters, '1.6');
</script>


myhtml.html, myjnpl.jnlp og myjar.jar er alle i samme dir på web serveren.
Avatar billede kkaen Nybegynder
24. oktober 2009 - 09:01 #19
Okay - det må jeg se, om jeg kan overføre til it eksempel. JEg troede nu ellers, at mit eksempel var opbygget korrekt, eftersom jeg netop har fulgt diverse eksempler.

Jeg har også forsøgt at få hjælp til problemet gennem en supporter ved SUN. Da vedkommende stadig gad svare, sagde han bl.a., at en JNPL-fil ikke var nødvendig i dette tilfælde. At sådan en kun blev brugt, når appletten/applikationen skulle køre udenfor browseren. Årsagen til at den så alligevel er med i de tilsendte filer er, at jeg som sagt har forsøgt at løse problemet på diverse måder selv.
Avatar billede arne_v Ekspert
24. oktober 2009 - 16:13 #20
codebase="AppletFromScratch"
href="/Jnlp/fileJnlp.jnlp"
href="fileJnlp.jar"
documentBase="/Jnlp/javaapplication1.jar"

tror jeg konflikter alt for meget med hensyn til hvad der er hvor.
Avatar billede arne_v Ekspert
24. oktober 2009 - 16:15 #21
Avatar billede kkaen Nybegynder
29. oktober 2009 - 14:28 #22
Jeg har haft nogle problemer med mit OS, hvorfor jeg ikke har kunnet lave noget omkring det omtalte projekt. Men nu har jeg endelig fået lavet videre på det.

Jeg har lavet en ny package til alle filerne, lavet jar, lavet jnpl og forsøger at vise appletten via di script.
Jeg har nu rettet list til i nogle fejl, jeg havde lavet, og når jeg prøver at vise appletten i browseren (Firefox - skal det helst være IE?) nu, så kan jeg se, at der kommer et "frame" med appletten i, som herefter forsvinder. I java-consolen står der så:
"
exception: null.
java.io.FileNotFoundException: JNLP not available: gameApplet.jnlp
    at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.io.FileNotFoundException: JNLP not available: gameApplet.jnlp
"

Oprindeligt har jeg lavet et bibliotek på serveren, som hedder "Applet1". Heri har jeg lagt både "gameApplet.jar" og "gameApplet.jnlp". Disse filer her jeg under debugging også lagt i serverens root-bibliotek, hvor den aspx.siden, som skal vise appletten også ligger.

Problemet ligger vel i nogle af referencerne?

gameApplet.jnlp:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp href="gameApplet.jnlp">
    <information>
        <title>Applet via JNLP demo</title>
        <vendor>Arne</vendor>
    </information>
    <resources>
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se" />
        <jar href="gameApplet.jar" main="true" />
    </resources>
    <applet-desc name="JNLP demo" main-class="applet1.AppletFromScratch" width="600" height="400">
    </applet-desc>
</jnlp>

Indhold af jar:
Applet1
|-classerne
META-INF
|-MANIFEST.MF

Manifestet er:
Manifest-Version: 1.0
Main-Class: AppletFromScratch
Class-Path: gameApplet.jar
Avatar billede arne_v Ekspert
29. oktober 2009 - 17:05 #23
Ligger gameApplet.jnlp i samme dir som HTML filen?
Avatar billede kkaen Nybegynder
29. oktober 2009 - 19:05 #24
Ja, det gør den. Men jeg kom lige i tanke om, at der vist var en forskel på, hvor sitet loades fra. Der skulle vist være en fejl, når man kører det gennem localhost. Så jeg må hellere lige uploade det til et site og teste dér.
Jeg vender snarest muligt tilbage med resultatet.
Avatar billede kkaen Nybegynder
30. oktober 2009 - 09:59 #25
Hmm, nu kan jeg ikke engang få lov til at kompilere projektet. Når jeg forsøger, får jeg fejlen:

It is an error to use section registered as allowDefinition='MashineToApplication' beyond applicationlevel. This error can be caused by a virtual directory not being configured as an application in IIS.

Inde i web.config siger fejlen, at linien:

<authentication mode="None"/>

ikke er rigtig. Jeg har forsøgt at ændre den til "windows", men det hjalp ikke. Hvordan kommer jeg videre her?
Avatar billede arne_v Ekspert
31. oktober 2009 - 02:20 #26
Ingen anelse. Jeg er ikke specielt IIS kyndig.
Avatar billede kkaen Nybegynder
17. november 2009 - 20:29 #27
Nå, jeg kan ikke få skidtet til at virke. Så jeg må lade det ligge i denne omgang, og kaste mig over noget andet. Lægger du lige et svar Arne_V, eftersom der ikke er andre, der har magtet at yde assistance?
Avatar billede arne_v Ekspert
18. november 2009 - 01:54 #28
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester