Probleme mit Ausgabe in Textfeld bei Applet

Joke_r

Mitglied
Hallo Leute,

muss ein Applet schreiben, welches Primzahlen berechnet und diese dann in ner GUI ausgibt.
Es soll auf korekte Trennung zwischen UI und Fachkonzept geachtet werden.
Haben das ganze erst mal als Anwendung geschrieben, das hat auch funktioniert, haben es jetzt in ein Applet umgewandelt, jetzt funktioniert aber die Ausgabe in dem Textfeld nicht mehr.. ;-]

Es wird aus der FK-Klasse ein Vektor, der die bereits gefundenen Primzahlen beinhaltet, an die GUI übergeben, der Inhalt dort zu nem String verkettet und dann in der TextArea per setText() ausgegeben, es wird aber nix angezeigt...

Ich poste den code mal hier, wäre super, wenn irgendjemand ne Idee hat, wo unser Fehler liegt.
Danke schonmal :-D

Klasse PrimBerechnung
Code:
/**
 * Fachkonzept PrimBerechnung
 * berechnet die Primzahlen
 */
 
 import java.util.*;
 
 public class PrimBerechnung extends Thread
 {
 	//Attribute
 	private Vector v, prim;
 	private int grenze;
 	private int anzahl; 
 	
 	
 	
 	//ReferenzAttribut (nur zum Testen)
 	private static PrimBerechnung eineBerechnung;
 	
 	//weitere Referenz attribute
 	private PrimGUI eineGUI;
 	
 	//Konstruktor
 	public PrimBerechnung(int g, PrimGUI eineGUI)
 	{
 		super();
 		this.v = v;
 		prim = new Vector();
 		grenze = g;
 		anzahl = 0;
 		this.eineGUI = eineGUI;
 		prim.addElement(new Integer (0));
 		
 	}
 	
 	//Operationen
 	
 	//prüft, ob die übergebene Zahl eine Primzahl ist.
 	public boolean pruefeZahl(int zahl)
 	{
 		for (int i = 2; i <= ((zahl+1)/2); i++)
 		{
 			if ((zahl % i) == 0)
 			{
 				return false;
 			}	
 			
 		}
 		return true;
 	}
 	
 	
 	
 	//methode run
 	public void run()
 	{
 		int g = grenze;
 		while (true)
 		{
 			//abbrechen wenn stop gedückt
 			if (isInterrupted())
 			{
 				break;
 			}
 			
 			// erstes Vektor-Element auf aktuell berechnete Zahl setzen
			prim.set(0, new Integer(g));
			System.out.println("Erstes Feld im Vektor auf die aktuell berechnete Zahl gesetzt");	
		
			//prüfen, ob g aktuell eine primzahl ist
			if (pruefeZahl(g))
			{
				System.out.println("Primzahl gefunden : " + g);
				prim.addElement(new Integer(g));
			}
			else
			{
				System.out.println("berechnung bei " + g);
				// eineGUI.printZahl(g, prim);
			}
			
			eineGUI.printZahl(prim);
			System.out.println("Ausgabe in GUI aufgerufen");
			
			
			//aktuelle zahl hochzählen
			g++;
		}
	}
	
}

Klasse PrimGUI
Code:
/** 
 * GUI-Klasse zu Primzahlberechnung
 */
 
 
 import java.awt.*;
 import java.awt.event.*;
 import java.util.*;
 import java.applet.*;
 
 public class PrimGUI extends Applet
 {
 	//Attribute
 	private Button Start, Stop, Speichern;
 	private Label UeberschriftLabel, EingabeLabel, AusgabeLabel;
 	private TextField Eingabe;
 	private TextArea Ausgabe;
 	private int anzahl;
 	private Vector prim;
 	private boolean running = false;
 	
 	//ReferenzAttribute
 	private static PrimGUI eineGUI;
 	
 	//weitere Referenzattribute
 	private PrimBerechnung eineBerechnung;
 	private AktionsAbhoerer einAbhoerer;
 	
 	
 	//Konstruktor
 	public void init()
 	{
 		setLayout(null);
 		setSize(600,400);
 		setVisible(true);
 		setBackground(new Color(12632233));
 		// eineGUI=this;
 		
 		//Label
 		UeberschriftLabel = new Label("Primzahlenberechnung",1);
 		UeberschriftLabel.setFont(new Font("Dialog", Font.BOLD, 14));
 		UeberschriftLabel.setBounds(10, 35, 560, 30);
 		add(UeberschriftLabel);
 		
 		EingabeLabel = new Label("Untere Grenze", 1);
 		EingabeLabel.setBounds(10, 80, 100, 30);
 		add(EingabeLabel);
 		
 		AusgabeLabel = new Label("Primzahlen ab eingegebener Grenze :", 1);
 		AusgabeLabel.setBounds(10, 130, 220, 30);
 		add(AusgabeLabel);
 		
 		//TextField
 		Eingabe = new TextField("");
 		Eingabe.setBounds(130, 80, 50, 26);
 		add(Eingabe);
 		
 		//TextArea
 		Ausgabe = new TextArea("",0,0);
 		Ausgabe.setEditable(false);
 		Ausgabe.setBounds(10, 170, 570, 200);
 		add(Ausgabe);
 		
 		//Abhoerer
 		einAbhoerer = new AktionsAbhoerer();
 		
 		//Buttons
 		Start = new Button("Start");
 		Start.setBounds(200, 80, 60, 30);
 		add(Start);
 		Start.addActionListener(einAbhoerer);
 		
 		Stop = new Button("Stop");
 		Stop.setBounds(280,80,60,30);
 		add(Stop);
 		Stop.addActionListener(einAbhoerer);
 		
 		Speichern = new Button("Speichern");
 		Speichern.setBounds(500, 80, 80, 30);
 		add(Speichern);
 		Speichern.addActionListener(einAbhoerer);
 		
 		
 				
 		//nur vorläufig für Anwendung vvv
 		/*
 		addWindowListener(new WindowAdapter(){
 								public void windowClosing(WindowEvent event)
 								{
 									System.exit(1);
 								}
 							});
 		*/
 	}
 	
 	//Operationen
 	public synchronized void printZahl(Vector p)
 	{
 		// prim = p;
 		System.out.println("Aufruf zur Ausgabe des Vektors bei GUI angekommen");
 		String zwischentext = "Berechnet wird: "+p.elementAt(0) + "  Bisher gefundene Primzahlen: \n";
 		System.out.println(zwischentext);
 		
 		for(int i=1; i<p.size(); i++)
 		{
 			zwischentext = zwischentext + p.elementAt(i) + " ";
 			if(i%10 == 0)
 				zwischentext += "\n";
 		}
 		//System.out.println(zwischentext);
 		//System.out.println("");
 		
 		Ausgabe.setText(zwischentext);
 		System.out.println("Zahl geschrieben...");
 		eineGUI.start();
 	}
 	
 	/*
 	public void printPrimzahl(int zahl)
 	{
 		Ausgabe.setCaretPosition(0);
 		System.out.println("PRIMZAHL AUSGABE , Caret auf 0");
 		Ausgabe.append(String.valueOf(zahl) + "          ");
 		//System.out.println("Primzahl geschrieben...");

 		//Ausgabe.insert(String.valueOf(zahl), 0);
 		Ausgabe.append("\n");
 		//Ausgabe.insert(String.valueOf(zahl), anzahl);
 		//anzahl = anzahl + 5;
 	}
 	
 	*/
 	
 	//main
 	public void start()
 	{
 		eineGUI = new PrimGUI();
 		eineGUI.init(); 
 	}
 	
 	
 	//INNERE KLASSE AKTIONSABHOERER
 	
 	public class AktionsAbhoerer implements ActionListener
 	{
 		public void actionPerformed(ActionEvent e)
 		{
 			System.out.println("Button gedrückt");
 			if (e.getSource() == Start)
 			{
 				anzahl = 0;
 				running = true;
				try
				{
					// Abfrage auf positive Begrenzung
					if(Integer.valueOf(Eingabe.getText()).intValue() >= 0)
					{
						eineBerechnung = new PrimBerechnung(Integer.valueOf(Eingabe.getText()).intValue(), eineGUI);
 						eineBerechnung.start();
 					}
					
					else
					{
						Ausgabe.setText("Bitte eine nicht-negative Grenze angeben");
					}
					
				}
				// wird geworfen, wenn Nicht-Integer-Wert als Grenze angegeben wird
				catch(NumberFormatException exc)
				{
					Ausgabe.setText("Bitte eine Zahl als Grenze eingeben!");
				}
 				
 				System.out.println("start-button gedrückt...");
 			}
 			
 			if (e.getSource() == Stop)
 			{
 				eineBerechnung.interrupt();
 				running = false;
 				System.out.println("Stop button gedrückt...");
 			}
 		}
 	}
 	
 	
 }

Gruß,
Joke_r
 
Zurück