ugrás a tartalomhoz

Java applet - ClassFormatError - de localhoston semmi baja

mravo · 2008. Május. 8. (Cs), 08.59
Nem nagyon foglalkoztam eddig Java fejlesztéssel, inkább csak kalapálással. A sors úgy hozta, hogy most el kéne sajátítanom ezt-azt. Például a listenerek használatát. Erre írtam is egy kódot, amely tkp. annyit csdinál, hogy kiírja, milyen egérműveletet végeztél, ott ahol végezted, illetőleg kiírja a leütött billentyű ASCII kódját.

Localhoston gyönyörűen ment, a feketeleves megint akkor jött, amikor feltöltöttem szerverre. Ott ugyanis elszáll:

java.lang.ClassFormatError: Incompatible magic value 1013478509 in class file CEgerFigyelom
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at sun.applet.AppletClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at eventproba.init(eventproba.java:13)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Ha pedig ráfrissítek a böngészőre, ezt is megkapom a konzolon:

java.lang.ClassFormatError: CEgerFigyelom
at eventproba.init(eventproba.java:13)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

A kód nem titkos, be is másolom az egészet. Nagyon régóta szenvedek már ennek a kis programnak a működésre bírásával, nagyon megköszönném, ha valaki tudna adni valami iránymutatást: mégis mit csinálok rosszul?

Mindenkinek köszönöm előre is.

mravo

import java.applet.*;
import java.awt.*;
import java.awt.Window.*;
import java.awt.event.*;
import java.awt.Graphics;

public class eventproba extends Applet {

	static Graphics gh;

	public void init() {
		setFocusable(true);
		addMouseListener(new CEgerFigyelom());
		addKeyListener(new CBillentyuleutesFigyelom());
		gh = getGraphics();
	}
	
	public void paint(Graphics g) {
		g.drawString("helló", 100, 100);
	}
	
	public static void drawingline() {
		gh.drawLine(100, 100, 400, 500);
	}
	
	public static void labeller(int x, int y, int ev) {
		switch (ev) {
			case 1:
				gh.setColor(Color.green);
				gh.drawString("kattintottál itt", x, y);
				break;
			case 2:
				gh.setColor(Color.magenta);
				gh.drawString("beléptél az appletbe itt", x, y);
				break;
			case 3:
				gh.setColor(Color.blue);
				gh.drawString("kiléptél az appletből itt", x, y);
				break;
			case 4:
				gh.setColor(Color.red);
				gh.drawString("egeret nyomtál itt", x, y);
				break;
			case 5:
				gh.setColor(Color.orange);
				gh.drawString("felengedted itt", x, y);
				break;
		}
	}
	
	public static void pressedkeylabeller(int ch) {
		gh.setColor(Color.black);
		gh.fillRect(0, 0, 50, 50);
		gh.setColor(Color.white);
		String sch;
		sch = ""+ch+"";
		gh.drawString(sch, 15, 15);
	}
}

class CEgerFigyelom extends eventproba implements MouseListener {

	public void mouseClicked(MouseEvent e) {
		System.out.println("kattintottál");
		System.out.println("egeret nyomtál");
		int x = e.getX();
		int y = e.getY();
		labeller(x, y, 1);
	}
	
	public void mouseEntered(MouseEvent e) {
		System.out.println("beléptél az appletbe");
		System.out.println("egeret nyomtál");
		int x = e.getX();
		int y = e.getY();
		labeller(x, y, 2);
	}
	
	public void mouseExited(MouseEvent e) {
		System.out.println("kiléptél az appletből");
		System.out.println("egeret nyomtál");
		int x = e.getX();
		int y = e.getY();
		labeller(x, y, 3);
	}
	
	public void mousePressed(MouseEvent e) {
		System.out.println("egeret nyomtál");
		int x = e.getX();
		int y = e.getY();
		labeller(x, y, 4);
	}
	
	public void mouseReleased(MouseEvent e) {
		System.out.println("felengedted az egeret");
		System.out.println("egeret nyomtál");
		int x = e.getX();
		int y = e.getY();
		labeller(x, y, 5);
	}
}

class CBillentyuleutesFigyelom extends eventproba implements KeyListener {

	public void keyPressed(KeyEvent e) {
		System.out.println("billentyű lett lenyomva");
		int ch = e.getKeyCode();
		pressedkeylabeller(ch);
	}
	
	public void keyReleased(KeyEvent e) {
	}
	
	public void keyTyped(KeyEvent e) {
	}
}
 
1

Pontositas

zmb · 2008. Május. 8. (Cs), 09.35
A hiba azt jelenti, hogy a ClassLoader nem tudja betolteni az osztalyt. A kododdal semmi baj nincs (leven nalad fut is), a leforditott bytecode serul meg valahol utkozben.

Egy-ket tisztazando kerdes:
- Localhost mit jelent nalad? Milyen OS hanyas verzioju jdk, ki a jdk gyartoja (sun, ibm, bea, stb.)
- Mi az a szerver? Mit jelent, hogy "Ott ugyanis elszáll"? Az applet kliens oldalon fut, bongeszoben. Szervernek elmeletileg nincs befojasa a dologba.
- Milyen bongeszo alatt probaltad? A bongeszo ala milyen java plugin van berakva?

Szvsz valami verzio/gyarto elcsuszas lehet, es az okozza a bajt.
2

Pontosítások

mravo · 2008. Május. 8. (Cs), 09.58
Localhost:
WIN XP SP2 operációs rendszer
Sun jdk1.6.0_05

Szerver:
A szerver alatt csak annyit értettem, hogy a class fájlt feltöltve a tárhelyre. Erre én is gondoltam egyébként, hogy esetleg megsérül útközben, de ez ellen mit lehet tenni? Esetleg ha Jar-ba becsomagolom, az megvédi?

Böngésző:
FF 2.0.0.13, illetve IE 7.0.5730.11 - egyik alatt sem megy.
Java Platform Standard Edition - Version 6 Update 5, gyártója a Sun, mindkét böngészőnél

Köszi.
3

Link

zmb · 2008. Május. 8. (Cs), 12.08
Megprobalhatod berakni jar-ba, talan gyorsabban toltodik le. Linket szabad kapni, ahol kint van az applet?
4

Ki fogtok röhögni + van egy másik kérdésem is

mravo · 2008. Május. 9. (P), 09.25
Ki fogtok röhögni, de Java terén még tényleg abszolúte kezdő vagyok.

Meg lett a hiba.

A fordító készített egy CEgerFigyelom.class-t, illetve egy CBillentyuzetFigyelom.class-t is, amelyekre én nem számítottam. Ezeket nem FTP-ztem fel, így persze hogy nem futott. Mostmár oké.

Azért a link: http://pbo.extra.hu/java/egerfigyelo/eventproba.html

Elküldöm, mert rögtön lenne egy másik kérdésem is. Java2 platformon sehogy nem tudom működésre bírni. Localhoston se, és így sem.

A következő "nagyon komoly" appletet sem sikerült Java2 platformon futásra bírni:

public class CHelloWWW extends java.applet.Applet {
	public void paint(java.awt.Graphics gc) {
		gc.drawString("HELLO WWW", 100, 100);
	}
}
Hogyan kell lefordítanom egy .java fájlt, hogy az mind Java, mind Java2 platformon fusson?

Bocsánat ezért a kezdő kérdésért, ezt is megprobáltam kiguglizni, sajnos nem jártam sikerrel. Az idő viszont nagyon szorít:(

Előre is köszönöm!