SEO-Software von Suchmaschinenoptimierung.de

Probleme mit dem Quelltext

(hier klicken, um zum Original Thread zu gelangen)
Skatanist
Hi Leute,

ich hab hier dieses supertolle "JAVA-Programmierhandbuch" von David H. Friedel Jr. und Anthony Potts vorliegen.
In dem Buch wird man ins kalte Wasser geworfen, wobei man den Quelltext eines Java-Applets (Laufschrift-Applet) abtippen, kompilieren und in eine HTML Datei einbinden soll.
Danach wird der Quelltext Schritt für Schritt erklärt.

Allerdings gibt es ein Problem: Das kompilieren funktioniert nicht! Um genau zu sein, bringt JAVAC 8 Errors.

Da ich noch keine Ahnung von JAVA hab und auch C++ nur in den Grundzügen kann, ist mir der Großteil des Quelltextes natürlich schleierhaft.
Deshalb paste ich ihn hier in der Hoffnung, dass ihr mir bei der Fehlersuche im Quelltext helfen könnt.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
// TickerTape Applet realisiert eine Laufschrift

import java.applet.*;
import java.awt.*;

// Klasse TickerTape (Laufschrift)
public class TickerTape extends Applet implements Runnable{
	// Deklaration der Variablen
	String inputText;
	String animSpeedString;
	Color color = new Color(255, 255, 255);
	int xpos;
	int fontLength;
	int fontHeight;
	int animSpeed;
	Font font;
	Thread ttapeThread = null;
	image im;
	Graphics osGraphics;
	boolean suspended = false;
	
	// Initialisierung des Applet
	public void init(){
		inputText = getParameter("TEXT");
		animSpeedString = getParameter("SPEED");
		animSpeed = Integer.parselnt(animSpeedString);
		im=createImage(size().width, size().height);
		osGraphics = im.getGraphics();
		xpos = size().width;
		fontHeight = 4 * size().height / 5;
		font = new Font("Helvetica", 1, fontHeight);
	}
	
	// Ueberschreiben der Methode paint der Klasse des Applets
	public void paint(Graphics g){
		paintText(osGraphics);
		g.drawImage(im, 0, 0, null);
	}
	
	// Schreiben des Hintergrunds und des Textes in den Puffer des Bilds
	public void paintText(Graphics g){
		g.setColor(Color.black);
		g.fillRect(0, 0, size().width, size().height);
		g.clipRect(0, 0, size().width, size().height);
		g.setFont(font);
		g.setColor(color);
		FontMetrics fmetrics = g.getFontMetrics();
		fontLength = fmetrics.stringWidth(inputText);
		fontHeight = fmetrics.getHeight();
		g.drawString(inputText, xpos, size().height - fontHeight / 4);
	}
	
	// Starte das Applet als Thread
	public void start(){
		 if(ttapeThread == null){
			ttapeThread = new Thread(this);
			ttapeThread.start();
		 }
	}
	
	// Setze Koordinaten fuer Ausgabe des Textes
	public void setcoord/(){
		xpos = xpos - animSpeed;
		 if(xpos <- fontLength){
			xpos = size().width;
		 }
	}
	
	// Aendere die Koordinaten und neu ausgeben
	public void run(){
		while(ttapeThread != null){
			try {Thread.sleep(50);} catch (InterruptedExceptione){}
			setcoord();
			repaint();
		}
	}
	
	// Erneut ausgeben, wenn Puffer fertig geschrieben
	public void update(Graphics g) {
		paint(g);
	}
	
	// Maus-Klicks bearbeiten
	public boolean handleEvent(Event evt) {
		 if(evt.id == Event.MOUSE_DOWN) {
			 if (suspended) {
				ttapeThread.resume();
			 }else {
				ttapeThread.suspend();
			 }
			 suspended = !suspended;
			 }
			 return true;
	}
	
	// Beenden des Thread und am Ende alles aufraeuumen
	public void stop(){
		 if(ttapeThread != null)
			ttapeThread.stop();
		 ttapeThread = null;
	}
	
} // Ende des Applet TickerTape
Donut
welche Fehler wirft er nu denn?

Haste den Classpath gesetzt?
-> http://www.selfjava.de/java0034.htm
Skatanist
hoppla, die fehlermeldungen hab ich wohl vergessen *schandeübermich*

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
TickerTape.java:72: <identifier> expected
			try {Thread.sleep(50);} catch (InterruptedExceptione){}
									    ^

TickerTape.java:74: ')' expected
			repaint()
				 ^

tickerTape.java:79: illegal start of expression
	public void update(Graphics g) {
	^

TickerTape.java:101: ';' expected
	}
	 ^

TickerTape.java:103: '}' expected
} // Ende des Applet TickerTape
	 		       ^

TickerTape.java:18: cannot resolve symbol
symbol	: class image
location: class TickerTape
	image im;
	^

TickerTape.java:26: cannot resolve symbol
symbol	: method parselnt (java.lang.String)
location: class java.lang.Integer
		animSpeed = Integer.parselnt(animSpeedString);
				   ^

TickerTape.java:72: cannot resolve symbol
symbol	: class InterruptedExceptione
location: class TickerTape
			try {Thread.sleep(50);} catch (InterruptedExceptione){}
						       ^

Note: TickerTape.java uses or overrides a deprecated API.
Note: Recompile with -deprecation for details.
8 errors


was ne Abtipparbeit ^^
Mit -deprecation wirft er mir zusätzlich 10 Warnungen aus, die ich aber jetzt nich auch noch abtippen wollte.

Ich glaub ich mach jetzt erstmal Feierabend, mein Kopp is zu voll, um mich jetzt noch mit Classpath rumschlagen zu können, das blick ich grad immo net...

Morgen früh dann in aller frische und evtl mit nem andren Buch von vorne ans Werk *g*
Donut
hmm ich hab mir das mal angeschaut, da sind tatsächlich noch einige Fehler drin.

1. Die Formatierung ist nich vorhanden (kein Fehler, nur so isses unlesbar) Vielleicht liegts auch an der 'Zitat' funktion des Forums. Benutzt nächstes mal 'Code' (Die Raute)

2.
code:
1:
public void setcoord/()

Ich kann mir nicht vorstellen, dass ein Slash ein erlaubtes Zeichen in der Variablenbenennung ist

3.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
[...]
	// Starte das Applet als Thread
	public void start()
	{
		if(ttapeThread == null){
		ttapeThread = new Thread(this);
		ttapeThread.start();
	}
}

Die letzte Klammer ist zuviel

4.
code:
1:
	image im;

Der Datentyp heißt Image und nicht image



Versuchs also mal so, was saht er jetzt?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
// TickerTape Applet realisiert eine Laufschrift

import java.applet.*;
import java.awt.*;

// Klasse TickerTape (Laufschrift)
public class TickerTape extends Applet implements Runnable
{

	// Deklaration der Variablen

	String inputText;
	String animSpeedString;
	Color color = new Color(255, 255, 255);
	int xpos;
	int fontLength;
	int fontHeight;
	int animSpeed;
	Font font;
	Thread ttapeThread = null;
	Image im;
	Graphics osGraphics;
	boolean suspended = false;


	// Initialisierung des Applet
	public void init()
	{
		inputText = getParameter("TEXT");
		animSpeedString = getParameter("SPEED");
		animSpeed = Integer.parselnt(animSpeedString);
		im=createImage(size().width, size().height);
		osGraphics = im.getGraphics();
		xpos = size().width;
		fontHeight = 4 * size().height / 5;
		font = new Font("Helvetica", 1, fontHeight);
	}


	// Ueberschreiben der Methode paint der Klasse des Applets
	public void paint(Graphics g)
	{
		paintText(osGraphics);
		g.drawImage(im, 0, 0, null);
	}


	// Schreiben des Hintergrunds und des Textes in den Puffer des Bilds
	public void paintText(Graphics g)
	{
		g.setColor(Color.black);
		g.fillRect(0, 0, size().width, size().height);
		g.clipRect(0, 0, size().width, size().height);
		g.setFont(font);
		g.setColor(color);
		FontMetrics fmetrics = g.getFontMetrics();
		fontLength = fmetrics.stringWidth(inputText);
		fontHeight = fmetrics.getHeight();
		g.drawString(inputText, xpos, size().height - fontHeight / 4);
	}
	
	// Starte das Applet als Thread
	public void start()
	{
		if(ttapeThread == null){
		ttapeThread = new Thread(this);
		ttapeThread.start();
	}

	
	// Setze Koordinaten fuer Ausgabe des Textes
	public void setcoord()
	{
		xpos = xpos - animSpeed;
		if(xpos <- fontLength)
		{
			xpos = size().width;
		}
	}
	
	// Aendere die Koordinaten und neu ausgeben
	public void run()
	{
		while(ttapeThread != null)
		{
		try {Thread.sleep(50);} catch (InterruptedExceptione){}
		setcoord();
		repaint();
		}
	}

	// Erneut ausgeben, wenn Puffer fertig geschrieben
	public void update(Graphics g) 
	{
		paint(g);
	}

	// Maus-Klicks bearbeiten
	public boolean handleEvent(Event evt) 
	{
		if(evt.id == Event.MOUSE_DOWN) 
		{
			if (suspended) 
			{
				ttapeThread.resume();
			}
			else 
			{
				ttapeThread.suspend();
			}
			suspended = !suspended;
		}
		return true;
	}

	// Beenden des Thread und am Ende alles aufraeuumen
	public void stop()
	{
		if(ttapeThread != null)
		ttapeThread.stop();
		ttapeThread = null;
	}

} // Ende des Applet TickerTape
Skatanist
oh thx, habs jetzt in code geändert.

Also, die Fehler wurden jetzt auf 5 reduziert, dafür sinds 1-2 neue:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
TickerTape.java:62: illegal start of expression
	public void setcoord(){
	^


TickerTape.java:101: ';' expected
	}
	 ^


TickerTape.java:103: '}' expected
} //Ende des Applet TickerTape
			      ^


TickerTape.java:7: TickerTape should be declared abstract; it does not define run() in TickerTape
public class TickerTape extends Applet implements Runnable{
       ^


TickerTape.java:26: cannot resolve symbol
symbol	: method parselnt (java.lang.String)
location: class java.lang.Integer
		animSpeed = Integer.parselnt(animSpeedString);

Note: TickerTape.java uses or overrides a perecated API.
Note: Recompile with -deprecation for details.
5 errors


werde mich jetzt mal um den Classpath kümmern...

edit:
okay, wie ich den classpath setze, weiß ich jetzt - also die syntax ist kein prob, aber...
welchen pfad soll ich denn angeben?
is das der classpath für die classfile, die ich kompilieren will oder muss ich da auf bestehende klassen verweisen?
Skatanist
Zitat:
Original von Donut
3.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
[...]
	// Starte das Applet als Thread
	public void start()
	{
		if(ttapeThread == null){
		ttapeThread = new Thread(this);
		ttapeThread.start();
	}
}

Die letzte Klammer ist zuviel


Wirklich? denn es wurden 2 geschweifte geöffnet, also müssen doch auch 2 geschweifte geschlossen werden.
tim-wos
Zitat:
Original von Skatanist
Zitat:
Original von Donut
3.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
[...]
	// Starte das Applet als Thread
	public void start()
	{
		if(ttapeThread == null){
		ttapeThread = new Thread(this);
		ttapeThread.start();
	}
}

Die letzte Klammer ist zuviel


Wirklich? denn es wurden 2 geschweifte geöffnet, also müssen doch auch 2 geschweifte geschlossen werden.

Jo, Donut hat sich wohl geirrt großes Grinsen
Skatanist
aber seltsam... wenn ich die klammer wieder dazuschreibe, bringt JAVAC wieder 8 fehler verwirrt
Donut
also wenn du den Quelltext vorliegen hast, einfach nochmal Zeile für Zeile kontrollieren.

Das mit der Klammer:
Ich hab da die if-abfrage übersehen - mit Formatierung wär das nicht passiert, Klammer ist also richtig großes Grinsen
Jochen
Hallo,

obwohl ich von Java noch keine Ahnung habe geht's jetzt bei mir ...

Was ich gemacht habe :

Falsch: image im;
Richtig: Image im;
Anmerkung: Tippfehler, ist im Buch richtig

Falsch: try {Thread.sleep(50);} catch (InterruptedExceptione){}
Richtig: try {Thread.sleep(50);} catch (InterruptedException e){}
Anmerkung: Ist im Buch schon falsch. Tipp: guten Editor verwenden z.B. SciTe :-)

Falsch: animSpeed = Integer.parselnt(animSpeedString);
Richtig: animSpeed = Integer.parseInt(animSpeedString);
Anmerkung: Tippfehler. Tipp: guten Editor verwenden z.B. SciTe :-)

BTW: Auf der im Buch angegebene Website http://www.coriolis.com soll angeblich die Source zum Download bereit liegen, habe ich jedoch nicht gefunden.

Jochen
(hier klicken, um zum Original Thread zu gelangen)



Tipp: Ranking-Konzept.de - Das SEO-Forum (Forum rund um die Suchmaschinenoptimierung) der artaxo AG.
Das große Versicherungs ABC von Versicherung.de - mit allen Aspekten der Computerversicherungen!
Fan-Foren.de, die große Community mit Musikforum ist ab sofort online.