[java]krijg programma niet aan de praat

Pagina: 1
Acties:

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
Ik ben bezig met het programmeren van space invaders voor java, maar het is me tot op heden nog steeds niet gelukt om het programma te laten runnen. Ik krijg geen compiler foutmeldingen, maar bij het runnen van het programma via appletviewer krijg ik een 'applet not initialized' en box die je erbij krijgt (heeft dat een naam?) staat dan het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
AppAccelerator(tm) 1.2.010 for JAVA (JDK1.2), x86 version.
Copyright (c) 1997-1999 Inprise Corporation. All Rights Reserved.
java.lang.NullPointerExeception:
  at java.applet.Applet.getDocumentBase(Applet.java:90)
  at space.invaders.<init>(invaders.java:32)
  at java.lang.Class.newInstance0(Native Method)
  at java.lang.Class.newInstance(Compiled Code)
  at sun.applet.AppletPanel.createApplet(Appletpan1.java:532)
  at sun.applet.AppletPanel.runLoader(AppletPanel.java:468)
  at sun.applet.AppletPanel.run(Compiled Code)
  at java.lang.Thread.run(Compiled Code)

ik heb het idee dat wat er onder staat allemaal komt door de eerst foutmelding, nl een probleem met getDocumentBase()
- of is het de JDK???

Voor als het getDocumentBase() is, hier het stukje code dat wordt genoemt in bovenstaande stukje:
code:
1
  Image pic_scheepje = getImage(getDocumentBase() , "scheepje.gif");

Nou had ik al gehoord dat java geen directe schrijftoegang heeft, maar een plaatje lezen zou toch moeten kunnen? anyways, ik heb het een keer upgeload en weer uitgeprobeert, maar de applet werkte weer niet. Ik heb intussen zowat geen idee meer wat ik kan doen. Een eerder topic met zoiets ben ik met de search nog niet tegengekomen, dus post ik er nu maar een nieuw topic voor.

Voor als het bovenstaande niet genoeg informatie geeft of als het aan mn jdk zou liggen heb ik hier de source [tot nu toe] geupload..

Localhost is where the heart is


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

een NullPointer exception is altijd een fout in je code.
Een object wat je wilt gebruiken is (nog) niet geinitaliseerd en heeft als waarde null.

Aan je stacktrace te zien komt het door de getDocumentBase() (zoals je zelf ook al zegt)

een Applet mag in principe niet lezen van of schrijven naar het fileSystem ook al is het maar een plaatje. Daar kan dus zeker de fout zitten.

Als je afbeeldingen wilt gebruiken in je Applet zul je de afbeeldingen in een jar moeten zetten en deze jar meegeven in je applet tag. Afbeeldingen moet je dan in je applet laden met de class.getResource methode.

Zoek eens op jar + applet op www.javasoft.com of google

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
ok, ik zoek even..

*vraagje voor ondertussen* = dan moet ie toch wel werken nadat ik m (dat zijn dan uiteraard de class files) heb upgeload? want dat deed ie ook niet. Zegt ie dat ie invaders.class niet kan vinden terwijl die in dezelfde map staat als de html en de codebase staat op ".".

Localhost is where the heart is


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op vrijdag 02 november 2001 13:36 schreef SilentStorm het volgende:
ok, ik zoek even..

*vraagje voor ondertussen* = dan moet ie toch wel werken nadat ik m (dat zijn dan uiteraard de class files) heb upgeload? want dat deed ie ook niet. Zegt ie dat ie invaders.class niet kan vinden terwijl die in dezelfde map staat als de html en de codebase staat op ".".
Alle classes die je gebruikt moeten in een jar staan. en deze moet je in je applet tag staan.

Een applet word gedownload en op de client uitgevoerd, daar zal hij dus ook naar de classes zoeken en daar staat ie niet zolang jij hem er niet neerzet (dmv je jar)

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
Ok, ik heb een jar file gemaakt van het plaatje dat ik wil gebruiken en alle invaders$*.class bestanden. Deze jar file en de invaders.class + htmlfiletje staan in een directory.

in de html staat:
code:
1
2
3
4
5
6
<APPLET
  CODE     = invaders.class
  ARCHIVE  = invaders.jar
  WIDTH    = 200
  HEIGHT   = 200
>

dus die moet goed zijn. (moet dus steeds ff opnieuw bij nieuwe compilatie van code). In het programma moet ik nu ergens die class.getResource zien te planten. Vervangt deze getImage() of getDocumentbase()? ik zou zeggen eerste, maar java herkent het commando niet zo best geloof ik. in welke package zit ie?

[edit]
k kan geloof ik ook invaders.class in de jar zetten.

Waarom eigenlijk jar files als het ook anders <zou moeten> kunnen?
--
paar linkjes voor geinterresseerden
dees is wel nuttig voor jar..en dees is nog wel handig voor het space invaders programma verder..

Localhost is where the heart is


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
kheb nog wat zitten prutsen en ben uiteindelijk (met jar erbij) tot dit gekomen:
code:
1
2
3
4
5
6
7
  public void teken(String img, int x, int y)
  { tekenx = x;
    tekeny = y;
    URL linkje = getResource(img+".gif");
    tekenimg = getImage(linkje);;
    repaint();
  }

MAAR:

method getResource(java.lang.string) not found in class space.invaders.

ook geprobeerd:
• invaders.getResource()
• invaders.class.getResource()
• invaders.Class.getResource()
• class.getResource()
• Class.getResource()

ik heb intussen de volgende imports:
• java.awt.*;
• java.awt.event.*;
• java.applet.*;
• java.lang.*;
• java.lang.Class.*;
• java.net.*;

edit: dom foutje eruit

Localhost is where the heart is


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

invaders.getClass().getResource() moet je hebben :)

je moet dan een path opgeven relatief aan het path waar je dan bent..

Verwijderd

Je kunt dat getDocumentBase() pas gebruiken als je applet geïnitialiseerd is.
code:
1
2
3
4
5
6
Image pic_scheepje;

public void init()
{
    pic_scheepje = getImage(getDocumentBase() , "scheepje.gif");
}

Dan zou het beter moeten gaan denk ik.

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
ik heb ipv invaders super gebruikt, omdat ie anders zit te kloten met die static/non static rotzooi.. (invaders is de class, niet het object).
code:
1
URL linkje = super.getClass().getResource(img+".gif");

Hij geeft nu echter nog steeds een probleem als ik de volgende regel aanroep (dat is tenminste waar ik m op terugtrace)
code:
1
tekenimg = getImage(linkje);

k moet nu echter stoppen want de systeembeheerder blijkt een klein nimbda probje te hebben dat ie wil oplossen..

Localhost is where the heart is


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
dat daar boven probeer ik maandag dan weer uit.. Danx voor alle help

Localhost is where the heart is

Pagina: 1