Zum Inhalt springen

Timer + JProgressBar = Verzweiflung


Empfohlene Beiträge

Geschrieben

Hi,

bin mal wieder am Java Programmieren und habe einige Probleme :/

Habe schon etliche Foren durchsucht und Beispiel Codes getestet, aber funktioniert nicht.

Zuerst mal zu dem Problem mit dem Timer:

Ich habe folgenden Code:


public void start ()

	{

		p1.setValue(stim);

	}

Dieser Befehl sollte jede Sekunde ausgeführt werden. Hab es schon hiermit probiert:

public void start ()

	{

	timer = new Timer(60,new ActionListener()){	

        public void actionPerformed(ActionEvent e) {


		p1.setValue(stim());        	

	}

Klappt aber nicht.

Wisst ihr, was daran falsch ist, oder wo das Problem liegt ?

@Perdi und Konsorten: Bitte keine Verweise auf Javainsel oder dergleichen, die Texte dort habe ich mir schon mehrmals durchgelesen und es hat mich nicht wirklich weiter gebracht.

Geschrieben

Ein wenig mehr Code wäre extrem Hilfreich. Wo wird beispielsweise p1 initialisiert und erstmalig angezeigt? Von wo wird start() aufgerufen, etc. Die Fehlerquelle muss nicht zwangsläufig im Timer sitzen, sondern kann auch an anderen Stellen innerhalb des Layouts liegen.

']Habe schon etliche Foren durchsucht und Beispiel Codes getestet

Auch hier?

http://java.sun.com/docs/books/tutorial/uiswing/misc/timer.html

']aber funktioniert nicht
Wie genau äussert sich "funktioniert nicht"?
Geschrieben

Hi Perdi :)

p1 ist der Name meiner Progress Bar, so wie ich sie beim Erstellen genannt habe.

p1 = new JProgressBar();

getContentPane().add(p1, new AnchorConstraint(872, 983, 955, 822, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));

p1.setPreferredSize(new java.awt.Dimension(63, 14));

p1.setBackground(new java.awt.Color(219,248,253));

p1.setMaximum(staz);

p1.setMinimum(stim);

start() wird von meinem Button Start aufgerufen, sobald dieser geklickt wird.

private void b1ActionPerformed(ActionEvent evt) {

System.out.println("b1.actionPerformed, event=" + evt);

start();

Genau auf der Seite von dir war ich auch schon ;)

Der Fehler äußert sich darin, dass der Eclipse Debugger mir meldet, dass am Ende des gesamten Quellcodes meiner Datei Klammern } entfernt werden müssen.

Allerdings sind die wirklich nicht zuviel, sondern das stimmt so.

Wenn ich die Klammer lösche, so will er die vorgänger Klammer auch gelöscht haben und die Klammer davor auch löschen und so weiter...

Geschrieben
']Der Fehler äußert sich darin' date=' dass der Eclipse Debugger mir meldet, dass am Ende des gesamten Quellcodes meiner Datei Klammern } entfernt werden müssen. Allerdings sind die wirklich nicht zuviel, sondern das stimmt so.[/quote']Das wage ich sehr zu bezweifeln. Wenn der Compiler eine Fehlermeldung ausgibt, dann steckt auch in der Regel ein Fehler dahinter. Aber ohne den kompletten Quelltext zu sehen kann dir hier auch keiner weiterhelfen und sagen wo genau der Fehler liegt. *mitdemzaunpfahlwink*

Geschrieben

*Zaunpahlnehmundindenbodensteck*:


public void start ()

	{



		p1.setValue(stim);




		}

	private void b1ActionPerformed(ActionEvent evt) {

		System.out.println("b1.actionPerformed, event=" + evt);



		//Prüfen, ob eine fabend.txt schon da ist


		if (new File("fabend.txt").exists())

		{}

			else 

			{



		//Neue Textdatei anlegen

		FileWriter f1;

		try {

		      f1 = new FileWriter("fabend.txt");

		      f1.write("0");

		      f1.close();

		    } catch (IOException e) {

		       System.out.println("Fehler beim Erstellen der Datei");

		     }

		//_

			}


		//__


		//Textfelder auslesen

		kza=t1a.getText();

		kzb=t1b.getText();

		gza=t2a.getText();

		gzb=t2b.getText();

		aza=t3a.getText();

		azb=t3b.getText();

		pza=t5a.getText();

		pzb=t5b.getText();


		//Stringvariable in Integer ändern

		kzai=Integer.valueOf(kza).intValue();

		kzbi=Integer.valueOf(kzb).intValue();

		gzai=Integer.valueOf(gza).intValue();

		gzbi=Integer.valueOf(gzb).intValue();

		azai=Integer.valueOf(aza).intValue();

		azbi=Integer.valueOf(azb).intValue();

		pzai=Integer.valueOf(pza).intValue();

		pzbi=Integer.valueOf(pzb).intValue();


		//Berechnung der einzelnen Zeiten


		//Kommzeit

		kzi=(kzai*60)+kzbi;

		//Gehzeit

		gzi=(gzai*60)+gzbi;

		//Arbeitszeit 

		azi=(azai*60)+azbi;

		//Pausenzeit

		pzi=(pzai*60)+pzbi;

		//Fixzeit

		fzi=(azi+pzi);


		//Überstunden Berechnen


		//Gesamt in Minuten

		üh2=(gzi-kzi)-fzi;

		üh2s=String.valueOf(üh2);



		//Gesamt in Stunden und Minuten


		//Stunden

		int üh3=(üh2/60);

		double üh4=(Math.floor(üh3));


		DecimalFormat df = new DecimalFormat( "0" );

		üh5= df.format( üh4 );


		//Minuten

		int üh6=Integer.valueOf(üh5).intValue();


		int üh7=(üh6*60);

		int üh8=(üh2-üh7);


		ühm=String.valueOf(üh8);




		t6a.setText(üh5);

		t6b.setText(ühm);



		//Systemzeit auslesen + Eintragen

		Calendar cal = Calendar.getInstance();

		stunde= cal.get(Calendar.HOUR_OF_DAY);

		minute= cal.get(Calendar.MINUTE);


		//Systemzeit in Minuten gesamt

		int stundeim=stunde*60;

		stim=stundeim+minute;

		//_


		//Systemzeit + Arbeitszeit in Minuten

		staz=stim+fzi;

		//_


		//__



		//Einlesen der Überstunden Total


		String filename = "fabend.txt";



	    byte buffer[] = new byte[ 4000 ];


	    FileInputStream in = null;


	    try

	    {

	      in = new FileInputStream( filename );


	      int len = in.read( buffer, 0, 4000 );


	      mgga = new String( buffer, 0, len );


	      //_




	      // Berechnung Minuten / Stunden saved+actually


	      //Überstunden gesamt in Minuten


	      int mggai=Integer.valueOf(mgga).intValue();

	      int üg1=mggai; //Üstunden aus .txt in min


	      ütsi=üg1+üh2; //Minuten gesamt zum Speichern .txt in min

	      ütss=String.valueOf(ütsi); //In String zum Speichern

	      //_




	      //Stunden Total

	      int sta=(üg1/60);

	      double stad=(Math.floor(sta));


	      DecimalFormat dff = new DecimalFormat( "0" );

	      sts= dff.format( stad );

	       //_


	      //Minuten Total

	      int stm1=Integer.valueOf(sts).intValue();

	      int stm2=stm1*60;

	      stmi=üg1-stm2;

	      stm=String.valueOf(stmi);




	      t4a.setText(sts);

	      t4b.setText(stm);

	    }

	    catch ( IOException e ) { System.out.println( e ); }


	    finally

	    {

	      try {

	        if ( in != null ) in.close();

	      } catch (IOException e) {}

	    }



		//Aktualisierung JProgressBar

	    start();

	    //_


	}

Geschrieben

hm ok, dann gehn wir das jetzt mal ganz anders an.

Ich habe eine JProgressbar bereits erstellt. Nun möchte ich, dasss Variable a als Startwert (min) für die Progressbar gilt und Variable b als Endwert (max).

Soweit so gut, das hab ich ja schon gemacht.

Nun soll allerdings jede Sekunde die Systemzeit (Variable z) neu abgeprüft werden und per setValue an die ProgressBar übergeben werden.

Wie müsste der Code hierfür aussehen ?

Geschrieben
']...

Nun soll allerdings jede Sekunde die Systemzeit (Variable z) neu abgeprüft werden und per setValue an die ProgressBar übergeben werden.

Wie müsste der Code hierfür aussehen ?

den code hast du doch schon fast. einen timer bauen und jede sekunde in der actionPerformed die zeit an die progbar weitergeben.

bigredeyes

Geschrieben

Hi bigredeyes,

ja, deswegen bin ich auch fast am verzweifeln :/

Hab schon fast alles fertig, hab das mit dem timer auch schon probiert, aber das klappt ja nicht, da kommt immer, dass ich alle Klammern im Quellcode entfernen soll ^^

Timer sieht wie folgt aus:

public void start ()

{

timer = new Timer(60,new ActionListener()){

public void actionPerformed(ActionEvent e)

{

p1.setValue(stim());

}

Stimmt mit den Klammern etwas nicht?

KAnn ich eigentlich einfach die public void actionPerformed in die public void start () reinmachen ?

Geschrieben
']hm ok' date=' dann gehn wir das jetzt mal ganz anders an.[/quote']Warum? Die Vorgehensweise ist korrekt: Timer erstellen und darin die Aufgaben durchführen lassen.

Geschrieben

Ok, hab paarmal versucht den Code zu posten, aber er ist einfach zu groß, würde mehrere Posts benötigen.

Ich glaube aber, das Problem lokalisiert zu haben. Es liegt meiner Erkenntniss nach an actionPerformed(ActionEvent e)

Ich habe das nämlich schon bei meinen Buttons verwendet:


b1 = new JButton();

				getContentPane().add(b1, new AnchorConstraint(831, 769, 955, 519, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));

				b1.setText("Starten");

				b1.setPreferredSize(new java.awt.Dimension(98, 21));

				b1.addActionListener(new ActionListener() {

					public void actionPerformed(ActionEvent evt) {

						b1ActionPerformed(evt);

					}

Und hier bei den Buttons bringt mir Eclipse: TheMethod b1ActionPerformed(evt) is undefined for the type newActionListener(){} Liegt wohl hieran:

public void start ()

	{	

		timer = new Timer(60,[B]new ActionListener()[/B])

		{	

	        public void actionPerformed(ActionEvent e) {


			p1.setValue(stim());  

		}

Geschrieben
']
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
b1ActionPerformed(evt);
}
[/CODE] Kommt da noch was nach? Ansonsten zähl doch mal die Klammern. Ein Semikolon am Ende der Anweisung wäre wohl auch gut.
[code]timer = new Timer(60,[B]new ActionListener()[/B])
{
public void actionPerformed(ActionEvent e) {

p1.setValue(stim());
}

Auch hier ist die Klammerung falsch, und anscheinend fehlt auch hier das Semikolon.
Geschrieben

Bitte kein Threadpushing.

Ich habe mir den Code angeschaut, aber bei dem Chaos blickt wohl keiner durch.

Hinter deiner start fehlen auf alle Fälle schließende Klammern. [interface Mumpitz gelöscht]

Kapsel dein Problem von bisherigen Code ab und konzentriere dich erst einmal auf das was nicht funktioniert.

Wobei ich ganz ehrlich gestehen muss das ich nicht mal verstehe was du genau machen willst.

Gruß Jaraz

Geschrieben

ist mein Code wirklich so schlecht ?

Ich find den eigentlich ziemlich gut. Aber wie gesagt, bin noch Java Neuling und sowas wie neue Klassen schreiben noch nie gemacht :/

Geschrieben

Sieht so nach Gui Generator aus.

hier mal ein Mini Beispiel mit Timer und Anonymer Klasse.


import javax.swing.*;


public class Test extends JFrame {


	int counter = 0;


	JProgressBar bar = new JProgressBar(0, 100);


	Timer refreshTimer;


	public static void main(String[] args) {

		Test test = new Test();

	}


	public Test() {

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		this.getContentPane().add(bar);

		this.pack();

		this.setVisible(true);

		refreshTimer = new Timer(50, new java.awt.event.ActionListener() {

			public void actionPerformed(java.awt.event.ActionEvent evt) {

				counter++;

				bar.setValue(counter);

				System.out.println("refresh");

				if (counter == 100) {

					refreshTimer.stop();

				}

			}

		});

		refreshTimer.start();

	}

}


Gruß Jaraz

Geschrieben
']und dann hat keiner mehr Lust mir zu helfen
Dann solltest du den Fehler zuerst bei dir suchen. Wenn du Hilfe haben willst' date= dann ist es an dir jedem, der dir helfen möchte (und da gibt's hier sicherlich mehrere Leute) diese Hilfe so einfach wie möglich zu machen. Aber lies dir mal die Reaktionen durch, was für ein Eindruck ergibt sich dann?

  • Du wirst immer wieder nach fehlenden Informationen gefragt, die erst nach und nach eintröpfeln
  • Das, was an Informationen kommt ist teilweise dürftig, teilweise einfach unverständlich
  • Dein Code ist teilweise einfach grauenhaft, da verliert man jede Lust sich das ganze anzusehen und selbst mal nach dem Fehler zu suchen.

Du solltest nicht vergessen: Du möchtest etwas von uns - nicht andersrum. Und je mehr Informationen du gibst, je mehr du zeigst, dass du selbst versucht den Fehler einzugrenzen und man nachvollziehen kann, dass du auch verstehst, was dir an Antworten gegeben wird, desto eher wird sich jemand die Mühe machen, dir zu helfen. Aber nur zu rufen "Geht nicht, Hilfe!" führt in den allerwenigsten Fälle dazu eine sinnvolle und brauchbare Antwort zu erhalten.

']Aber wie gesagt' date=' bin noch Java Neuling und sowas wie neue Klassen schreiben noch nie gemacht[/quote']Dann fang nicht direkt bei der Fassade (GUI) an dein Haus zu bauen, bevor du nicht das Fundament (Sprachgrundkenntnisse) gelegt hast. Fehlende Klammern haben mit dem GUI überhaupt nichts zu tun. Wenn du aber nichtmal in der Lage bist einen solchen Fehler zu erkennen und zu beheben, dann muss du weiter unten anfangen - eben genau bei den Grundlagen und erstmal diese komplett verstanden haben. Ansonsten wird - um mal beim Bild zu bleiben - dein Haus immer auf wackeligen Beinen stehen und beim ersten Windstoß zusammenfallen.
Geschrieben

@Jaraz: Ist mit Jigloo und Eclipse gemacht

@Perdi: Ich hab immer versucht, euch so viele Informationen zu geben wie möglich, aber du musst dich auch einmal in mich hinein versetzen. Ich hab mir das alles in ewigen Stunden Selbststudium versucht beizubringen und immer wieder treten Probleme auf, eben genau dadurch, da ich alles aus verschiedenen Tutorials und Anleitungen zusammenflicken muss. Irgendwann brauch man einfach die Hilfe von Anderen. Und wenn dann die Aussage kommt: Fang nochmal von ganz vorne an und bring dir alles nochmal bei, dann kannst du dir sicher denken, wie mich das begeistert. Es wäre viel sinnvoller, mir meine Fehler zu zeigen und mir zu erklären, was ich falsch gemacht habe anstatt immer die selbe Stupide Antwort zu liefern: Lies die Java Doku.

Somit nimmst du den Leuten den Spaß am Programmieren und treibst sie eher dazu, aufzugeben, da sie wenn sie hilfe benötigen keine bekommen.

Geschrieben
']immer wieder treten Probleme auf' date=' eben genau dadurch, da ich alles aus verschiedenen Tutorials und Anleitungen zusammenflicken muss. [/quote']Ich glaube, das ist eines der grundsätzlichen Probleme. Du flickst dir zu viel aus irgendwelchen Tutorials zusammen, ohne zu verstehen, was der Code tut. Das führt zu nichts. Programmieren hat mit Abschreiben nichts zu tun.

Tut mir leid, wir sind nicht dazu da, für Begeisterung zu sorgen.

Nein, es ist sinnvoller - gerade auch für dich - wenn du selbst erkennst, wo das Problem liegt. Dabei lernst du nämlich auch gleich, wie du Informationen aus Dokumentationen ziehst. Das ist auf lange Sicht effektiver, als Code, den du nicht verstehst, aus Tutorials abzuschreiben.

Kannst du dir vorstellen, dass dein Verhalten bei den potentiellen Helfern den Eindruck erwecken könnte, dass das vielleicht das Beste wäre?
Geschrieben
']aber du musst dich auch einmal in mich hinein versetzen.
Nein, muss ich eben nicht! Wir sind nicht hier im Forum aktiv um kollektiv Mitleid mir dir und deiner Sitution zu haben.

Ich sehe (und nutze) ein Forum in erster Linie als Hilfe zur Selbsthilfe. Ich erwarte und gebe keine Komplettlösungen anhand einer gestellten Aufgabe. Wer das möächte muss den entsprechenden Stundensatz zahlen. Es geht um Hilfe und nicht um Abwälzung der eigenen Arbeit.

Was mir unter anderem bei dir fehlt ist der Wille selbst mal tiefer in die Materie einzudringen und zu versuchen den Fehler selbst zu finden, oder zumindestens zu zeigen, dass du dir hinreichend Gedanken zum Problem gemacht hast. Bei jedem neuen kleinen Problem schreist du sofort "Hilfe" anstatt erstmal zu überlegen, woran es eigentlich liegen könnte. Und das ist ein wirklich gut gemeinter Rat: Mit dieser Einstellung wirst du in der Zukunft keinen Erfolg haben und immer wieder auf Schnauze fallen.

']eben genau dadurch' date=' da ich alles aus verschiedenen Tutorials und Anleitungen zusammenflicken muss.[/quote']Klotzkopp hat es schon sehr schön ausgedrückt: Das sollst auch nicht irgendwas zusammenflicken sondern verstehen, was du tust! Nur dann wirst du dauerhaft eine Lösung finden können. Nur irgendwas abschreiben und hoffen, dass es funktioniert ist keine permanente Lösung. Was dir fehlt sind Grundlagenkenntnisse. Und die erhälst du nicht indem du aus verschiedenen Tutorials irgendwas rausziehst sondern nur nach gründlichen Durcharbeiten der entsprechenden Grundlagenliteratur.

Geschrieben
Es geht um Hilfe und nicht um Abwälzung der eigenen Arbeit.

Unter Abwälzung der Arbeit verstehe ich etwas anderes. Die ganzen Aktionen die ich haben will sind bereits alle im Quellcode eingebunden und ich habe lediglich gefragt, wo mein Fehler liegt. Somit kann hier von Abwälzung der Arbeit wohl kaum die Rede sein, da ich die ganze Arbeit bereits gemacht habe und ich lediglich Hilfe bei der Fehlersuche benötige.

Was mir unter anderem bei dir fehlt ist der Wille selbst mal tiefer in die Materie einzudringen und zu versuchen den Fehler selbst zu finden

Ich sitze jeden Tag bestimmt 2-3 Stunden an Java und versuche tiefer in die Materie einzudringen, allerdings mal mit weniger und mal mit mehr Erfolg. Aber sowas bekommt ihr natürlich nicht mit.

Klotzkopp hat es schon sehr schön ausgedrückt: Das sollst auch nicht irgendwas zusammenflicken sondern verstehen

Ich versuch das sehr wohl zu verstehen, nur um etwas zu verstehen muss man auch begreifen wie es Funktioniert und wie es arbeitet, daher muss ich es auch testen können in einem Programm, ob es funktioniert und welche Möglichkeiten ich habe. Wenn ich ein Tutorial lese und dann versuche das ganze praktisch umzusetzen und es einfach nicht klappt, dann wars das, weil ich ja niemanden habe, den ich fragen könnte, wie das funktioniert.

Ich kann dir die Grundlagen Java nicht innerhalb ein paar Minuten hier zusammenschreiben.

Die Grundlagen hat mir mein Lehrer ja schon beigebracht, hab in der letzten Arbeit z.b. eine 1,4 geschrieben, also ich kapier das irgendwo schon.

Die Entwicklung graphischer Benutzeroberflächen steht dabei sehr weit hinten und nicht am Anfang.

Wo auch immer das jetzt steht, mein Lehrer macht jedenfalls mit uns grafische Oberflächen und was wir bisher gemacht haben, versteh ich alles problemlos.

Wenn du glaubst innerhalb von ein paar Tagen komplexe Programme schreiben zu können, die du auch verstehst dann muss ich dich leider enttäuschen: Das geht nicht!

Ich hab den Eindruck du denkst, dass ich letzte Woche mit Java angefangen habe ? Ich habe in der Schule mittlerweile 1 Jahr lange Java und programmiere nebenbei immer mal etwas.

Geschrieben
']Somit kann hier von Abwälzung der Arbeit wohl kaum die Rede sein' date=' da ich die ganze Arbeit bereits gemacht habe und ich lediglich Hilfe bei der Fehlersuche benötige.[/quote']Und die hast du bereits bekommen. Hast du mal die Klammern gezählt, wie ich es auf der ersten Seite empfohlen habe?

Nein, wie sollten wir auch. Wir sehen nur die Ergebnisse, und anhand dieser müssen wir auf deine Kenntnisse schließen.

Und hier liegst du komplett falsch. Zum Programmieren gehört auch die Fähigkeit, Fehler zu finden und die Ursache zu erkennen. Da fehlt bei dir noch einiges, und wenn du dir nur immer wieder sagen lässt, wo der Fehler ist, und wie du ihn behebst, wirst du das kaum selbst lernen.

Noten sagen nicht viel aus. Wirklich.

Du hast aber noch Lücken bei den Grundlagen, und die zeigen sich nunmal. Wie ein Chirurg, der Erfahrung mit Herztransplantationen hat, aber erst mal eine Weile nachdenken muss, warum es nicht klappt, wenn er das Skalpell am falschen Ende anfasst.

Wie gesagt, wir können dich nur anhand dessen einschätzen, was du hier ablieferst. Und man kann auch 1 Jahr lang etwas falsch machen. Das geht sogar noch länger.

Also nochmal der Hinweis: Zähl mal die Klammern (dazu gehört auch, dass sie paarweise richtig verschachtelt sind), und prüfe, ob jede Anweisung mit einem Semikolon abgeschlossen ist. Das sind elementare Fehlersuchmechanismen, in der Art wie: "Skalpell am stumpfen Ende angefasst?"

Geschrieben

Ok, werd ich machen.

Wenn man mir sagt: Dein Code ist Ok, aber die Klammern stimmen nicht, überprüf die mal.

Dann kann ich damit was anfangen und kann auch nachschauen wo das Problem liegt und was ich falsch gemacht habe und somit daraus lernen.

Aber Perdi weißt ja in so ziemlich jedem post immer nur auf die Java Docu hin anstatt einem mal ein paar Tipps zu geben, damit man das Problem selber Lösen kann.

Geschrieben
']Wenn man mir sagt: Dein Code ist Ok, aber die Klammern stimmen nicht, überprüf die mal.

Dann kann ich damit was anfangen und kann auch nachschauen wo das Problem liegt und was ich falsch gemacht habe und somit daraus lernen.

Und was habe ich auf Seite 1 dieses Threads geschrieben?

Wie gesagt, was dir IMHO am meisten fehlt, ist die Fähigkeit zur Fehlerdiagnose bei absoluten Grundlagenproblemen. Da ist der Verweis auf die Doku schon richtig. Du wirst lernen müssen, dir solche Informationen selbst zu erarbeiten.
Gast
Dieses Thema wurde nun für weitere Antworten gesperrt.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...