paint methode richtig aufrufen

Status
Nicht offen für weitere Antworten.

Fridolin

Bekanntes Mitglied
Hallo,
ich wollte aus einer Textdatei eine Map zeichnen lassen mit einem InputStream und einem graphics objekt
allerdings das hab ich nicht geschafft, ich glaube es hat irgendwas mit den zyklen eines applets zu tun aber da ich mich nicht besser auskenne will ich nichts dazu sagen kann sich das vielleicht wer anschauen und mir helfen , wenn man das applet startet kommt auf jedenfall unten ein schriftzug mit applet notinited

lg Fridolin
Code:
import java.applet.*;
import java.awt.*;
import java.net.*;
import java.io.*;

public class VersuchPacman extends Applet implements Runnable
{
	private Graphics dbg;
	private URL url;
	InputStream stream;
	StreamTokenizer tokenizer;
	
public void init()
{
	
	try
		{
  			url = new URL(getCodeBase(), "Kopie von Mappe.txt");
		}
	catch (final MalformedURLException e)
		{

  		}
		
  
    
	try
		{
  			stream = url.openStream();
  			tokenizer = new StreamTokenizer(stream);
			tokenizer.parseNumbers();
			tokenizer.wordChars('c', 'c');
			tokenizer.wordChars('w', 'w');
			tokenizer.wordChars('n', 'n');
			tokenizer.wordChars('s', 's');
			tokenizer.wordChars('e', 'e');
			tokenizer.wordChars('0', ' ');
        	tokenizer.eolIsSignificant(true);
        	tokenizer.ordinaryChars(0, ' ');
        	tokenizer.slashSlashComments(true);
        	tokenizer.slashStarComments(true);
			tokenizer.whitespaceChars(' ',' ');
			
			String board[][] = new String[18][41]; 
			int boardint[][] = new int[18][41]; 
			int count1 = 0;
			int count2 = 0;
			int boardx = 0;
			int boardy = 0;
			String message = "";
			int blocksizex = 7; 
			int blocksizey = 16; 
			int token;

		while ((token = tokenizer.nextToken()) != StreamTokenizer.TT_EOF)
		{
  		switch (token)
  			{
    	    	case StreamTokenizer.TT_WORD:
      		message = "Word: " + tokenizer.sval;
      		board[count1][count2] = tokenizer.sval;
                                count2++;
      		break;
      	case StreamTokenizer.TT_EOL:
      		count1++;
            break;
        case StreamTokenizer.TT_EOF:
            break;
        default:
            char ch = (char)tokenizer.ttype;
            break;
  			}
		}
		for(count1 = 0; count1 <= 16; count1++)
		{
			for(count2 = 0; count2 <= 39; count2++)
			{
			boardint[count1][count2] = Integer.parseInt(board[count1][count2]);
			}	
		}
		for(count1 = 0; count1 <= 16; count1++)
		{
                                boardy+=blocksizey;
                                boardx = 0;
			for(count2 = 0; count2 <= 39; count2++)
			{
			switch (boardint[count1][count2])
				{
  			case 'n': dbg.setColor(Color.blue);
    			break;
  			default: dbg.setColor(Color.black);
    			break;
				}

		dbg.fillRect(boardx,boardy,blocksizex, blocksizey);
                                boardx+=blocksizex;

			}	
		}

	} 
catch (final IOException e) { }
}
	public void start ()
	{
		Thread th = new Thread (this);
		th.start ();
	}

	public void run ()
	{
	
	}
	public void paint (Graphics g)
	{
	
		paint(dbg);
	}


}
 
B

Beni

Gast
FAQ...

Um zu zeichnen musst du die paint-Methode des Applets überschreiben. Das geht nur in der Klasse, die von Applet erbt.
Um neu zu zeichen musst du die repaint-Methode des Applets aufrufen. Das kannst du aus jedem Thread machen.
 

Fridolin

Bekanntes Mitglied
Tut mir leid Beni ich habs nicht zusammengebracht, was ist daran falsch du hast gesagt ich muss die paint methode
des Applets überschreiben aber das kann ich nicht, wie muss man das machen
Was heißt Applet notinited Ladevorgang läuft...?

Code:
<HTML>
<HEAD>

<TITLE> VersuchPacman </TITLE>

</HEAD>
<BODY BGCOLOR="#000000" TEXT="#DDEECC" LINK="#FF8899" VLINK="#9988FF" ALINK="#FFFFFF">

<LEFT>
<APPLET CODE="VersuchPacman.class" WIDTH = 294 HEIGHT = 304 VSPACE=100 HSPACE=100>
<PARAM NAME=font VALUE="TimesRoman">
<PARAM NAME=size VALUE="36">
</APPLET>




Click on applet to allow for keyboard input

</HTML>
 

L-ectron-X

Gesperrter Benutzer
Fridolin, der HTML-Code hat mit dem Überschreiben der paint()-Methode nichts zu tun.
Wenn man vom Überschreiben spricht, meint man damit, eine in einer Basisklasse bereits definierte Methode in einer Subklasse mit eigenen bzw. erweiterten Fähigkeiten zu programmieren.
Vererbung (OOP) darf in diesem Fall für Dich kein Fremdwort sein.

Um in Deinem Applet die paint()-Methode zu überschreiben muss sie erst mal eingeführt werden, wie Du es schon gemacht hast. Damit die paint()-Methode zeichnen kann, musst Du ihr das erwartete Graphics-Objekt übergeben.
Das Graphics-Objekt, welches Du mit einem Zeichenblatt vergleich kannst, kann vor der Ausgabe mit paint() beliebig gestaltet werden.

Wenn Du das Graphics-Objekt als Instanzvariable (global) deklariert hast, kannst Du von allen Methoden Deiner Applet-Klasse darauf zugreifen, es verändern oder auslesen.
Der Aufruf paint(g) kann aus jeder Methode Deiner Applet-Klasse erfolgen. Ebenso die repaint()-Methode, die ein Neuzeichnen auslöst.

Den Inhalt der paint()-Methode beschränkst Du auf die Ausgabe vom dem, was gezeichnet werden soll.
Dazu benutzt Du die Methoden des übergebenen Graphics-Objekts.
 

Fridolin

Bekanntes Mitglied
Hallo L-ectron-X,
du hast mir im forum anfänger geschrieben das man nicht von applets auf dateien zugreifen kann,
und da ich sie nicht selbst signieren kann muss ich den teil

Code:
	try
		{
  			url = new URL(getCodeBase(), "Kopie von Mappe.txt");
		}
	catch (final MalformedURLException e)
		{

  		}

irgendwie umschreiben wenn ich eine Application daraus machen will da getCodeBase anscheinend
eine methode der klasse applet ist Wie mach ich das mit meinem streamtokenizer kann oder muss ich das mit einem BufferedReader oder StringBuffer tun und dann an meinen streamtokenizer weitergeben

was ist der unterschied zwischen den beiden varianten?

BufferedReader in
= new BufferedReader(new FileReader("foo.in"));

FileInputStream is = new FileInputStream("Kopie von Mappe.txt");
Reader r = new BufferedReader(new InputStreamReader(is));
StreamTokenizer st = new StreamTokenizer(r);

würde folgendes beispiel gehen, was ist der Unterschied zwischen einem BufferedReader und einem Reader?
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
StreamTokenizer st = new StreamTokenizer(in);

lg Fridolin

Code:
try
		{
  			stream = url.openStream();
  			tokenizer = new StreamTokenizer(stream);
			tokenizer.parseNumbers();
			tokenizer.wordChars('c', 'c');
			tokenizer.wordChars('w', 'w');
			tokenizer.wordChars('n', 'n');
			tokenizer.wordChars('s', 's');
			tokenizer.wordChars('e', 'e');
			//tokenizer.wordChars('0', ' ');
			tokenizer.ordinaryChars(0, ' ');
			tokenizer.whitespaceChars(' ',' ');
        	tokenizer.eolIsSignificant(true);
        	tokenizer.slashStarComments(true);
        	tokenizer.slashSlashComments(true);
        	
		while ((token = tokenizer.nextToken()) != StreamTokenizer.TT_EOF)
		{
  		switch (token)
  			{
    	case StreamTokenizer.TT_WORD:
      		message = "Word: " + tokenizer.sval;
      		board[count1][count2] = tokenizer.sval;
            count2++;
      		break;
      	case StreamTokenizer.TT_EOL:
      		count1++;
            break;
        case StreamTokenizer.TT_EOF:
        	count1 = 0;
        	count2 = 0;
            break;
        //default:
            //char ch = (char)tokenizer.ttype;
            //break;
  			}
		}
		for(count1 = 0; count1 <= 16; count1++)
		{
			for(count2 = 0; count2 <= 40; count2++)
			{
			boardint[count1][count2] = Integer.parseInt(board[count1][count2]);
			}	
		}
		for(count1 = 0; count1 <= 16; count1++)
		{
                           		if(count1 != 0)
                                {
                                boardy+=blocksizey;
                                boardx = 0;
                                }
			for(count2 = 0; count2 <= 40; count2++)
			{
			switch (boardint[count1][count2])
				{
  			case 'n': 
  				if(dbg == null)
  				{
  				dbg = getGraphics();
  				}
  				dbg.setColor(Color.blue);
    			break;
  			default: 
  				if(dbg == null)
  				{
  				dbg = getGraphics();
  				}
  				dbg.setColor(Color.black);
    			break;
				}
				
		dbg.drawRect(boardx,boardy,blocksizex,blocksizey);
		dbg.fillRect(boardx,boardy,blocksizex,blocksizey);
                                boardx+=blocksizex;
                                
			}	
		}
		paint(dbg);		
	}
 

Fridolin

Bekanntes Mitglied
Noch eine Frage hab ich wieso bekommt man bei folgendem einen stackoverflowerror es
sind doch gar nicht so viele zeichen drinnen nur 18*42 und 18 zeilenumbrüche

Code:
import java.awt.*;
import java.io.*;
import javax.swing.*;

public class VersuchPacman extends JFrame 
{
	private Graphics dbg;
	StreamTokenizer tokenizer;
	//BufferedReader in;
	FileInputStream is;
	Reader r;
	String board[][] = new String[18][42]; 
	String message = "";
	int boardint[][] = new int[18][42]; 
	int count1 = 0;
	int count2 = 0;
	int boardx = 0;
	int boardy = 0;
	int blocksizex = 7; 
	int blocksizey = 16; 
	int token;
	
public void VersuchPacman()
{
	

	try
		{
  			
  			//in = new BufferedReader(
			//new FileReader("Kopie von Mappe.txt")); 
			//tokenizer = new StreamTokenizer(in); 
			is = new FileInputStream("Kopie von Mappe.txt"); 
			r = new BufferedReader(
				new InputStreamReader(is)); 
			tokenizer = new StreamTokenizer(r); 
			tokenizer.parseNumbers();
			tokenizer.wordChars('c', 'c');
			tokenizer.wordChars('w', 'w');
			tokenizer.wordChars('n', 'n');
			tokenizer.wordChars('s', 's');
			tokenizer.wordChars('e', 'e');
			//tokenizer.wordChars('0', ' ');
			tokenizer.ordinaryChars(0, ' ');
			tokenizer.whitespaceChars(' ',' ');
        	tokenizer.eolIsSignificant(true);
        	tokenizer.slashStarComments(true);
        	tokenizer.slashSlashComments(true);
        	
		while ((token = tokenizer.nextToken()) != StreamTokenizer.TT_EOF)
		{
  		switch (token)
  			{
    	case StreamTokenizer.TT_WORD:
      		message = "Word: " + tokenizer.sval;
      		board[count1][count2] = tokenizer.sval;
            count2++;
      		break;
      	case StreamTokenizer.TT_EOL:
      		count1++;
            break;
        case StreamTokenizer.TT_EOF:
        	count1 = 0;
        	count2 = 0;
            break;
        //default:
            //char ch = (char)tokenizer.ttype;
            //break;
  			}
		}
		for(count1 = 0; count1 <= 16; count1++)
		{
			for(count2 = 0; count2 <= 40; count2++)
			{
			boardint[count1][count2] = Integer.parseInt(board[count1][count2]);
			}	
		}
		for(count1 = 0; count1 <= 16; count1++)
		{
                           		if(count1 != 0)
                                {
                                boardy+=blocksizey;
                                boardx = 0;
                                }
			for(count2 = 0; count2 <= 40; count2++)
			{
			switch (boardint[count1][count2])
				{
  			case 'n': 
  				if(dbg == null)
  				{
  				dbg = getGraphics();
  				}
  				dbg.setColor(Color.blue);
    			break;
  			default: 
  				if(dbg == null)
  				{
  				dbg = getGraphics();
  				}
  				dbg.setColor(Color.black);
    			break;
				}
				
		dbg.drawRect(boardx,boardy,blocksizex,blocksizey);
		dbg.fillRect(boardx,boardy,blocksizex,blocksizey);
                                boardx+=blocksizex;
                                
			}	
		}
		paint(dbg);		
	} 
catch (final IOException e) { }
}
	
	public void paint(Graphics g)
	{
	paint(g);
	}
	
	public static void main(String args[])
	{
	VersuchPacman neu = new VersuchPacman();
	neu.setSize(294,288);
	neu.setLocation(100,100);
	neu.setVisible(true);
	} 
}

das wär der Versuch mit dem Applet aber funktioniert auch nicht
Code:
import java.applet.*;
import java.awt.*;
import java.net.*;
import java.io.*;

public class VersuchPacman extends Applet implements Runnable
{
	private URL url;
	private Graphics dbg;
	private Thread update = null;
	InputStream stream;
	StreamTokenizer tokenizer;
	String board[][] = new String[18][42]; 
	String message = "";
	int boardint[][] = new int[18][42]; 
	int count1 = 0;
	int count2 = 0;
	int boardx = 0;
	int boardy = 0;
	int blocksizex = 7; 
	int blocksizey = 16; 
	int token;
	
public void init()
{
	
	try
		{
  			url = new URL(getCodeBase(), "Kopie von Mappe.txt");
		}
	catch (final MalformedURLException e)
		{

  		}
		
  
    
	try
		{
  			stream = url.openStream();
  			tokenizer = new StreamTokenizer(stream);
			tokenizer.parseNumbers();
			tokenizer.wordChars('c', 'c');
			tokenizer.wordChars('w', 'w');
			tokenizer.wordChars('n', 'n');
			tokenizer.wordChars('s', 's');
			tokenizer.wordChars('e', 'e');
			//tokenizer.wordChars('0', ' ');
			tokenizer.ordinaryChars(0, ' ');
			tokenizer.whitespaceChars(' ',' ');
        	tokenizer.eolIsSignificant(true);
        	tokenizer.slashStarComments(true);
        	tokenizer.slashSlashComments(true);
			
			

	} 
catch (final IOException e) { }
}
	public void start ()
	{
		if(update == null)
		{
		update = new Thread(this, "update");
		update.start();
		}
		//Thread th = new Thread (this);
		//th.start ();
	}

	public void run ()
	{
	Thread dieserThread = Thread.currentThread();
	Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
	
		while(update == dieserThread)
		{
		repaint();
		try
			{
			Thread.sleep(10000);
			}
			
		catch(InterruptedException event)
			{
			//System.err.println(event);
			}
		}
		
		Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
	}
	
	public void stop ()
	{
	update = null;
	}
	
	public void destroy ()
	{
	dbg.dispose();
	}
	
	public void paint (Graphics dbg)
	{
		try
			{
		while ((token = tokenizer.nextToken()) != StreamTokenizer.TT_EOF)
		{
  		switch (token)
  			{
    	case StreamTokenizer.TT_WORD:
      		message = "Word: " + tokenizer.sval;
      		board[count1][count2] = tokenizer.sval;
            count2++;
      		break;
      	case StreamTokenizer.TT_EOL:
      		count1++;
            break;
        case StreamTokenizer.TT_EOF:
        	count1 = 0;
        	count2 = 0;
            break;
        //default:
            //char ch = (char)tokenizer.ttype;
            //break;
  			}
		}
		for(count1 = 0; count1 <= 16; count1++)
		{
			for(count2 = 0; count2 <= 40; count2++)
			{
			boardint[count1][count2] = Integer.parseInt(board[count1][count2]);
			}	
		}
		for(count1 = 0; count1 <= 16; count1++)
		{
                           		if(count1 != 0)
                                {
                                boardy+=blocksizey;
                                boardx = 0;
                                }
			for(count2 = 0; count2 <= 40; count2++)
			{
			switch (boardint[count1][count2])
				{
  			case 'n': 
  				if(dbg == null)
  				{
  				dbg = getGraphics();
  				}
  				dbg.setColor(Color.blue);
    			break;
  			default: 
  				if(dbg == null)
  				{
  				dbg = getGraphics();
  				}
  				dbg.setColor(Color.black);
    			break;
				}
				
		dbg.drawRect(boardx,boardy,blocksizex,blocksizey);
		dbg.fillRect(boardx,boardy,blocksizex,blocksizey);
                                boardx+=blocksizex;
                                
			}	
		}
		paint(dbg);
		}
		catch (final IOException e) { }
	}
	
	public void update (Graphics dbg)
	{
		paint(dbg);
	}
}
 

L-ectron-X

Gesperrter Benutzer
Applet not inited bedeutet das das Applet nicht initialisiert werden konnte, also die init()-Methode auf Grund eines Fehlers nicht durchlaufen werden konnte.
Fridolin hat gesagt.:
du hast mir im forum anfänger geschrieben das man nicht von applets auf dateien zugreifen kann,
und da ich sie nicht selbst signieren kann muss ich den teil
Diesen Beitrag habe ich schon gesucht, weil ich dazu noch eine Ergänzung für Dich schreiben wollte.
Man kann Applets grundsätzlich auch selbst signieren. Dazu habe ich mal folgende Webseite zur Information:
http://www.olison.com/sites/signatur.php

Reader ist die abstrakte Superklasse von allen Character-InputStream-Klassen, also von zeichenorientierten Stream-Klassen. Die Klasse BufferedReader ermöglicht ein effizienteres Einlesen von Daten.
Die Klasse FileInputStream gehört zu den byteorientierten Stream-Klassen und arbeitet direkt auf externen Datenquellen.

Zur richtigen Benutzung von Stream-Klassen kannst Du Dich hier belesen:
http://www.galileocomputing.de/openbook/javainsel3/
 

Fridolin

Bekanntes Mitglied
Nein mittlerweile kommt es nicht mehr aber da ist gestanden applet notinited
aber seitdem ich das einlesen mit streamtokenizer aus der init methode genommen
und alles in die paint methode gegeben habe passt alles bis auf das nicht gezeichnet wird hmm
danke für den link
vielleicht liegts daran das ich die paint methode nirgends aufgerufen habe
das werd ich jetzt mal probieren
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B String in paint Methode anzeigen Tools - Maven, Gradle, Ant & mehr 5
M die paint-methode Tools - Maven, Gradle, Ant & mehr 2
U Probleme mit paint(Graphics g) Tools - Maven, Gradle, Ant & mehr 9
M paint() bei maximieren des fensters Tools - Maven, Gradle, Ant & mehr 3
H paint und repaint ?!? Tools - Maven, Gradle, Ant & mehr 2
E Card beim CardLayoutManager mit paint() bemalen??? Tools - Maven, Gradle, Ant & mehr 4
M Mit Maven eine jar Datei bauen ohne irgendeine main Methode Tools - Maven, Gradle, Ant & mehr 1
M Mit Maven eine jar Datei Bauen ohne irgendeine main Methode Tools - Maven, Gradle, Ant & mehr 18
T Daten per POST-Methode aus Java-Applet nach php-Script senden Tools - Maven, Gradle, Ant & mehr 3
G Applet Destroy methode wird nicht aufgerufen :( Tools - Maven, Gradle, Ant & mehr 4
S Ausgabe einer Methode schreibt in HTML Datei Tools - Maven, Gradle, Ant & mehr 8
C Aus dem Applet in die POST-Methode?? Tools - Maven, Gradle, Ant & mehr 6
N Libary Richtig hinzufügen Tools - Maven, Gradle, Ant & mehr 8
G Eclipse wirft Fehler trotzalledem dass die pom richtig durchläuft Tools - Maven, Gradle, Ant & mehr 2
G Maven Continious Integration mit Jenkins, Maven und Nexus - wie richtig? Tools - Maven, Gradle, Ant & mehr 1
T Maven das mvn assembly:assembly funktioniert nicht so richtig Tools - Maven, Gradle, Ant & mehr 3
Quasar Wie signiere ich mein Applet richtig? Tools - Maven, Gradle, Ant & mehr 6
M EJB wird nicht richtig deployed Tools - Maven, Gradle, Ant & mehr 2
S Reaktionstest klappt leider nicht richtig Tools - Maven, Gradle, Ant & mehr 10
J applet funktioniert nur im firefox nicht richtig Tools - Maven, Gradle, Ant & mehr 2

Ähnliche Java Themen

Neue Themen


Oben