Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[j2me] Midlet preverify

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

  • Semyon
  • Registratie: April 2001
  • Nu online
Heb eigenlijk hetzelfde probleem als [j2me] midp preverify, maar dat is een 5 jaar oud topic. Ik dacht een nieuw topic is beter dan de oude kicken.


Ik probeer een Midlet te schrijven voor mijn mobiele telefoon in Java.

Ik heb een file: MyMidlet.java

Die compile ik (onder linux) als volgt:

code:
1
$ javac -bootclasspath /opt/sun-j2me-bin-2.2/lib/cldcapi11.jar:/opt/sun-j2me-bin-2.2/lib/midpapi20.jar *java


Dan krijg ik netjes een class file. Volgens de standard procedure, wat ik kan vinden op het internet moet ik nu een preverify doen:

code:
1
2
3
$ /opt/sun-j2me-bin-2.2/bin/preverify -classpath /opt/sun-j2me-bin-2.2/lib/cldcapi11.jar:/opt/sun-j2me-bin-2.2/lib/midpapi20.jar MyMidlet
Error preverifying class MyMidlet
    Class loading error: Wrong name


De naam echter is wel goed, als ik namelijk MyMidlet veranderd in AapNootMies krijg ik:

code:
1
2
$ /opt/sun-j2me-bin-2.2/bin/preverify -classpath /opt/sun-j2me-bin-2.2/lib/cldcapi11.jar:/opt/sun-j2me-bin-2.2/lib/midpapi20.jar AapNootMies
Error loading class AapNootMies


Waar is de naam verkeerd van, en waarom?

Als ik de stap oversla en gewoon het resultaat jar, gaat uiteindelijk de VM van mijn phone zeuren dat hij het niet leuk vindt.

Wat doe ik verkeerd? Hoe verander ik het?

Mijn code zover, simpelste waarvoor het toch zou moeten werken?

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package MyMidlet;

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;

public abstract class MyMidlet extends MIDlet {

  public void startApp () { }

  public void pauseApp () { }

  public void destroyApp (boolean unconditional) {
  }

}

Only when it is dark enough, can you see the stars


  • Nick_S
  • Registratie: Juni 2003
  • Nu online

Nick_S

++?????++ Out of Cheese Error

Gevonden op het nokia forum..
Hi there.

I had excactly the same problem.

Class loading error: Wrong name

But I figgured it out, so I thought Id share it.


I had tried to upgrade my emulator sdk, but I couldnt get it to work. I tried it on the same project as I was having errors with.

The reason for this is that the Nokia Devsuit tools is reading through the <your_project>\classes\<midletname>\ folder for what contents it should preverify.

And it seems like the newer sdk I tried had made another folder in here, so it looked like <your_project>\classes\<midletname>\<midletname>\ which contained a copy of my classes.

Ofcourse the devsuit tried to preverify this folder and its contents too and would ofcourse result in an error.

I just removed this folder and the error was gone :)

Hope this can solve some stoopid problems.
Hopelijk heb je er wat aan.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 11:20

voodooless

Sound is no voodoo!

Ik vermoed dat je het package even moet meenemen, dus MyMidlet.MyMidlet .

Do diamonds shine on the dark side of the moon :?


  • Semyon
  • Registratie: April 2001
  • Nu online
Nee... die Nokia forum oplossing had ik ook al gevonden.
Ook de package meenemen (had ik al geprobeerd) werkt niet.

Uiteindelijk bleek dat het erom gaat in welke directory je het preverify commando aanroept.
Die moet in de "parent" directory zijn waar je project staat:

code:
1
2
3
package a

class b


moet staan in een directory structuur zoiets als

/home/users/java/MyApps/a

Nu werkt preverify alleen vanuit de directory

/home/users/java/MyApps

en dus niet vanaf de directory MyApps/a (wat me logisch lijkt omdat je daar ook de build wil maken)

Verder, de directory structuur moet matchen met de package name.
Een directory structuur als (wat ik eerst had)

home/users/java/MyApps/a/classes
home/users/java/MyApps/a/src

werkt niet.

Ik vind het allemaal wat onlogisch... maar het zij zo.

[ Voor 7% gewijzigd door Semyon op 03-12-2007 23:36 ]

Only when it is dark enough, can you see the stars


Verwijderd

Mij lijkt het eigenlijk logischer om de boel vanuit de root te runnen.....

  • Semyon
  • Registratie: April 2001
  • Nu online
De root van een project ja...

De root van de verschillende projecten, nee. Verder jammer dat ik geen src en classes dirs mag hebben.

Only when it is dark enough, can you see the stars


  • Nick_S
  • Registratie: Juni 2003
  • Nu online

Nick_S

++?????++ Out of Cheese Error

Volgens mij snap jij packages nog niet helemaal.
home/users/java/MyApps/a/classes
home/users/java/MyApps/a/src
Dit gaat inderdaad nooit werken, ook niet met normaal Java.

Wat wel gaat werken is:
/home/users/java/MyApps/ProjectA/src/examplepackage/ExampleClass.java
/home/users/java/MyApps/ProjectA/classes/examplepackage/ExampleClass.class
Je package namen zullen altijd onderdeel van je directory structuur uitmaken

Nu werkt preverify wel op je classes directory. Ook aan je java compiler kun je source en target directories opgeven. Je classpath zal nu niet je src directory bevatten maar alleen je classes directory (en eventuele andere jar files)

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'

Pagina: 1