Grafik hängt sich auf

Ference

Aktives Mitglied
Hallo zusammen...
mein Programm hängt sich auf wenn es eine for-schleife durchlaufen soll (Grafik)
Habe schon hier im ein wenig rumgelesen, bin aber nicht schlauer geworden :/

Java:
public void zufall(int läufe) 
	{
		of.getfortschritt().setValue(0);
		of.getfortschritt().setIndeterminate(false);
		of.getfortschritt().repaint();
		
		Random r1 = new Random();
		int z1;
		int value = 0;
		
		for(int i = 1; i <= läufe; i++)
		{
			z1 = r1.nextInt(2);
			z1++;
			//value = value+(läufe/100);
			of.getfortschritt().setValue(i);
			of.getfortschritt().repaint();
			System.out.println(z1);
		}
		
	}

Mit den zufällig generierten Zahlen soll noch weiter gerechnet werden, es bleibt also nicht so sinnfrei wie es gerade ist ;)

Es soll etwas Simmuliert werden.... und zwar x umläufe , darum eine progress bar :)

Bitte um Hilfe
Ference
 
S

Spacerat

Gast
Wo bitte läuft denn diese For-Schleife? Naja, eigentlich nicht schwer zu erraten... auf dem EDT (oder ähnlichem). Das bedeutet, dass der Fortschritt gar nicht angezeigt wird, lediglich das letzte Bild erscheint und es sieht aus, als ob es hängt. Du musst dem EDT auch schon Zeit geben, die durch "repaint()" gequeuete PaintEvents auszuführen, diese For-Schleife gehört also in einen extra Thread.
 

Ference

Aktives Mitglied
Ich glaub ich hab das falsch verstanden bzw. was falsch gemacht >.<

Java:
public void zufall(int läufe) 
	{
		of.getfortschritt().setValue(0);
		of.getfortschritt().setIndeterminate(false);
		of.getfortschritt().repaint();
		
		int x =1;
		ZufallThread t1 = new ZufallThread();
		
		while(x <= läufe)
		{
			t1.start();
			of.getfortschritt().setValue((läufe/100)*x);
			of.getfortschritt().repaint();
			x++;
		}
	}

Java:
public class ZufallThread extends Thread
{
	private Random r1;
	private int z1;
	
	ZufallThread()
	{
		r1 = new Random();
	}
	
	public void start()
	{
		z1 = r1.nextInt(2);
		z1++;
		System.out.println(z1);
	}
}
 
S

Spacerat

Gast
Ich glaub ich hab das falsch verstanden bzw. was falsch gemacht >.<
Nur geringfügig... Der Thread macht keinen Sinn, solange man nicht die Problemmethode "repaint()" in dessen "run()"-Methode aufruft. Diese liegt bei dir immer noch ausserhalb. Am besten, du verlagerst die Zeilen 3 bis 20 deines ersten Posts komplett in die "run()"-Methode des Threads aus.
 

Ference

Aktives Mitglied
Java:
ZufallThread(Oberfläche o)
	{
		of = o;
		läufe = Integer.parseInt(of.getAnzahl().getText());
	}
	
	public void run()
	{
		 of.getfortschritt().setValue(0);
	        of.getfortschritt().setIndeterminate(false);
	        of.getfortschritt().repaint();
	        
	        Random r1 = new Random();
	        int z1;
	        int value = 0;
	        
	        for(int i = 1; i <= läufe; i++)
	        {
	            z1 = r1.nextInt(2);
	            z1++;
	            value = value+(läufe/100);
	            of.getfortschritt().setValue(value);
	            of.getfortschritt().repaint();
	            System.out.println(z1);
	        }
	}

geht immernoch nicht ...
 
S

Spacerat

Gast
Und wie startest du den Thread nun? Wenn das noch so aussieht wie in deinem 2. Post, ists kein Wunder. Deine "zufall()"-Methode sollte etwa so aussehen:
Java:
public void zufall() 
    {
        ZufallThread t1 = new ZufallThread(of);
        t1.start();
        try {
          t1.join();
        } catch(InterruptedException e) {
        }
    }
 
S

Spacerat

Gast
Und was genau geht nicht? Evtl. liegts ja daran, dass du Ümlaute im Quelltext ausserhalb von Ganterpranken (DoubleQuotes oder Anführungszeichen) verwendest.
 

Ference

Aktives Mitglied
ja die grafik beleibt hängen... wenn ich starte bewegt sich der balken nicht mehr und wenn die schleife durchgelaufen ist wird er plötzlich als voll angezeigt ...
 
S

Spacerat

Gast
Ui, da hab' ich anscheinend was übersehen...
"läufe" ist ein int und ter Teiler 100 ist ein int. Das Ergebnis wird erst 1 (voll) wenn "läufe" >= 100 ist, ansonsten bleibt es 0. "value" sollte auf jedenfall ein float werden und aus der 100 (Post 6, Zeile 21) macht man mal ein 100.0F. So bekommt man Zahlen zwischen 0 und 1 und nicht blos 0 oder 1.
 

Ference

Aktives Mitglied
Java:
public void run()
	{
		of.getfortschritt().setMaximum(läufe);
		of.getfortschritt().setMinimum(0);
	        
		Random r1 = new Random();
		int z1;
		int value = 0;
	        
		for(int i = 1; i <= läufe; i++)
		{
			z1 = r1.nextInt(2);
			z1++;
			
			value++;
			of.getfortschritt().setValue(value);
			of.getfortschritt().repaint();
			System.out.println(z1);
		}
	}

wenn ich es richtig verstehe müsste es so auch gehen, oder?
falls ja muss ich euch enttäuschen ... geht immernoch nicht -.-
 
S

Spacerat

Gast
Keine Ahnung, was Oberfläche bei get-/setFortschritt für Werte erwartet, aber ich denke mal Werte zwischen 0 (0%) und 1 (100%). Natürlich funktioniert das dann nicht, wenn du Werte zwischen 0 und 100 übergibst. Es funktioniert auch dann nicht, wenn du Integer durch Integer durch Integer teilst, weil der Wert dann 99% lang 0 und 1% lang 1 ist.
 

Ference

Aktives Mitglied
ich habe doch jetzt das Max. Value auf "läufe" gesetzt ... heißt wenn es 100 läufe sind müsste beim 50 lauf das Value auf 50 stehen... wären es 1000 durchläufe halb bei 500, dass regelt doch die progressbar, oder?

Z1 hat nichts mit der progressbar zu tun... mit denen will ich ja dann irgendwann weiterrechnen , aber erst soll die Progressbar funktionieren...
 
S

Spacerat

Gast
Wie gesagt: Ich weis weder, was dass für 'ne Progressbar ist noch was das für 'ne Oberfläche ist. Ist es Swing, hast du evtl. nur irgendwo ein "super.paintComponent()" vergessen was die Repaintkette unterbricht. "Müsste gehen, tut's aber nicht ist" nicht wirklich hilfreich.
 

Ference

Aktives Mitglied
Ja ist swing

Java:
fortschritt = new JProgressBar();
		fortschritt.setBounds(50, 300, 300, 25);
		fortschritt.setVisible(true);
		fortschritt.setForeground(c);
		fortschritt.setIndeterminate(true);


wo müsste das "super.paintComponent()" dann hin?
 

bERt0r

Top Contributor
Öhm wenn man in der gleichen Methode in der man den thread startet danach wieder ein join macht, und diese Methode auf dem EDT läuft, wird der doch genauso blockiert oder?
 
S

Spacerat

Gast
Öhm wenn man in der gleichen Methode in der man den thread startet danach wieder ein join macht, und diese Methode auf dem EDT läuft, wird der doch genauso blockiert oder?
Bei Swing schon, aber wie gesagt, ich hatte keinen Plan, was das für 'ne Oberfläche war und nach wie vor auch nicht davon, wo "zufall()" aufgerufen wird. Wenn's auf dem EDT ist, ist "join()" natürlich störend. "super.paintComponent()" gehört in jede JComponent, die "paintComponent()" überschreibt, evtl. ist Oberfläche ja bereits eine solche Klasse.
 

Ference

Aktives Mitglied
Java:
public class Oberfläche extends JPanel
{
	private Rechner rechner;
	private JMenuBar menu;
	private JPanel zufall;
	private JLabel durchläufe;
	private JTextField anzahl;
	private JCheckBox zuf;
	private JProgressBar fortschritt;
	private JButton start;
	private Color c = new Color(0,205,0);
	
	Oberfläche()
	{
		this.setLayout(null);
		this.setBackground(Color.WHITE);
		
		rechner = new Rechner(this);
		
		menu = new JMenuBar();
		menu.setVisible(true);
		menu.add(MenuDatei());
		menu.add(MenuEinstellungen());
		menu.add(MenuInfo());
		
		fortschritt = new JProgressBar();
		fortschritt.setBounds(50, 300, 300, 25);
		fortschritt.setVisible(true);
		fortschritt.setForeground(c);
		fortschritt.setIndeterminate(true);    
		
		start = new JButton("Start!");
		start.setBounds(360, 300, 75, 25);
		start.setVisible(true);
		start.addActionListener(new Buttonhandler());
		
		zufall = new JPanel();
		zufall.setBackground(getBackground());
		zufall.setLayout(null);
		zufall.setBounds(10,20,150,70);
		zufall.setVisible(true);
		
		durchläufe = new JLabel("Durchläufe:");
		durchläufe.setBounds(10,35,80,25);
		durchläufe.setVisible(true);
		
		anzahl = new JTextField();
		anzahl.setBounds(80,40,50,20);
		anzahl.setVisible(true);
		
		zuf = new JCheckBox("Zufall");
		zuf.setBounds(10, 15, 80, 25);
		zuf.setBackground(getBackground());
		zuf.setVisible(true);
		
		zufall.setBorder(new TitledBorder("Zufall")); 	
		zufall.add(durchläufe);
		zufall.add(anzahl);
		zufall.add(zuf);
		
		this.add(zufall);
		this.add(fortschritt);
		this.add(start);
	}
	
	private class Buttonhandler implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent e) 
		{
			if(e.getSource() == start && zuf.isSelected() == true)
			{
				fortschritt.setIndeterminate(false);
				rechner.zufall();
				fortschritt.setIndeterminate(true);
			}			
		}		
	}

	private JMenu MenuInfo() 
	{
		JMenu info = new JMenu("?");
		
		JMenuItem über = new JMenuItem("Über");
		
		info.add(über);
		
		return info;
	}

	private JMenu MenuEinstellungen() 
	{
		JMenu einstell = new JMenu("Einstellungen");
		
		JCheckBox diagramm = new JCheckBox("Diagramm");
		JMenuItem optionen = new JMenuItem("Optionen");
		
		einstell.add(diagramm);
		einstell.addSeparator();
		einstell.add(optionen);
		
		return einstell;
	}

	private JMenu MenuDatei() 
	{
		JMenu datei = new JMenu("Datei");
		
		JMenuItem exit = new JMenuItem("Schließen");
		JMenuItem speichern = new JMenuItem("Speichern");
		JMenuItem laden = new JMenuItem("Laden");
		JMenuItem neu = new JMenuItem("Neu");
		
		datei.add(neu);
		datei.addSeparator();
		datei.add(laden);
		datei.add(speichern);
		datei.addSeparator();
		datei.add(exit);
		
		return datei;
	}
	
	public JMenuBar getMenu()
	{
		return menu;
	}
	
	public JProgressBar getfortschritt()
	{
		return fortschritt;
	}
	
	public JTextField getAnzahl()
	{
		return anzahl;
	}
}

Java:
public class Rechner 
{
	private Oberfläche of;
	
	Rechner(Oberfläche o)
	{
		of = o;		
	}
	
	public void zufall() 
	{
	
		ZufallThread t1 = new ZufallThread(of);
		t1.start();
		
		try 
		{
		t1.join();
		} 
		catch (InterruptedException e)
		{
			e.printStackTrace();
		}
	}
}

Java:
public class ZufallThread extends Thread
{
	private Oberfläche of;
	private int läufe;
	
	ZufallThread(Oberfläche o)
	{
		of = o;
		läufe = Integer.parseInt(of.getAnzahl().getText());
	}
	
	public void run()
	{
		of.getfortschritt().setMaximum(läufe);
		of.getfortschritt().setMinimum(0);
	        
		Random r1 = new Random();
		int z1;
		int value = 0;
	        
		for(int i = 1; i <= läufe; i++)
		{
			z1 = r1.nextInt(2);
			z1++;
			
			value++;
			of.getfortschritt().setValue(value);
			of.getfortschritt().repaint();
			System.out.println(z1);
		}
	}
}
 
S

Spacerat

Gast
Okay, dann entferne dieses Join-Konstrukt inkl. Try-Catch-Block wieder, dann müsste es gehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
M Umwandlung in den HSV-Farbraum lässt die Grafik pixelig werden AWT, Swing, JavaFX & SWT 8
S 2D-Grafik Winkelberechnungen auf 2D Grafik AWT, Swing, JavaFX & SWT 2
E Grafik karte erkennen AWT, Swing, JavaFX & SWT 3
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
S Höhendaten in einer Grafik ausgeben AWT, Swing, JavaFX & SWT 2
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
S Grafik in einer Klassen einfügen/hinzufügen AWT, Swing, JavaFX & SWT 1
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
F AWT Grafik wird nicht richtig aktualisiert AWT, Swing, JavaFX & SWT 2
J JTabbedPane Grafik unterhalb der Tabs AWT, Swing, JavaFX & SWT 3
S LookAndFeel GUI-Grafik AWT, Swing, JavaFX & SWT 5
J Verschwommene Grafik AWT, Swing, JavaFX & SWT 4
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
F Grafik mit Buttons versehen AWT, Swing, JavaFX & SWT 8
C Grafik Taschenrechner AWT, Swing, JavaFX & SWT 5
J Grafik (Kreis) schneller bewegen? AWT, Swing, JavaFX & SWT 6
Kenan89 Grafik und Text in JPanel anzeigen AWT, Swing, JavaFX & SWT 8
D Fenster mit Grafik überlappen AWT, Swing, JavaFX & SWT 3
Maxim6394 Rotation einer Grafik in swing AWT, Swing, JavaFX & SWT 13
D Swing Grafik in JPanel anzeigen. AWT, Swing, JavaFX & SWT 3
W Grafik von JFrame korrekt speichern AWT, Swing, JavaFX & SWT 7
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Swing JLabel (mit einer Grafik) aktualisieren AWT, Swing, JavaFX & SWT 2
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts AWT, Swing, JavaFX & SWT 2
Daniel_L Grafik erstellen, drin zeichnen und dann speichern AWT, Swing, JavaFX & SWT 2
D Grafik über JPanels hinweg verschieben AWT, Swing, JavaFX & SWT 2
C Grafik von main aus aufrufen AWT, Swing, JavaFX & SWT 13
O Swing Label(bzw. Grafik) verdekt von anderm Label AWT, Swing, JavaFX & SWT 2
T rekursive Grafik AWT, Swing, JavaFX & SWT 5
I 2D-Grafik Problem mit schreiben von Text auf eine Grafik AWT, Swing, JavaFX & SWT 7
F Swing Framework gesucht (Swing, Chart, "Scheduling" Grafik) AWT, Swing, JavaFX & SWT 2
S Pacman-Grafik AWT, Swing, JavaFX & SWT 23
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
lordcarlos Dynamische und interaktive grafik AWT, Swing, JavaFX & SWT 5
D Systemmodale Grafik AWT, Swing, JavaFX & SWT 10
J Geladene Grafik in ImageIcon auf Panel fest positionern. AWT, Swing, JavaFX & SWT 8
W Grafik aktualisieren AWT, Swing, JavaFX & SWT 5
S Swing Zugriff auf Polyline in Grafik AWT, Swing, JavaFX & SWT 4
A Swing Bei größe verändern des Fensters Grafik weg AWT, Swing, JavaFX & SWT 3
C gute Grafik-Bibliotheken gesucht AWT, Swing, JavaFX & SWT 6
D JFormattedTextfield um Grafik erweitern AWT, Swing, JavaFX & SWT 15
O Grafik wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
P JPanel mit Grafik von HDD über JTree AWT, Swing, JavaFX & SWT 10
S 2D-Grafik beeinflussen durch Scrollbalken AWT, Swing, JavaFX & SWT 2
A Grafik aus MIME-kodiertem Inhalt erzeugen AWT, Swing, JavaFX & SWT 2
T (WACOM) Grafik Tablet abfragen AWT, Swing, JavaFX & SWT 3
S Button mit Grafik versehen AWT, Swing, JavaFX & SWT 5
D Grafik bearbeiten AWT, Swing, JavaFX & SWT 11
M Ich habe Werte und Brauche Grafik! AWT, Swing, JavaFX & SWT 3
M Grafik flexibel an berechneten Koordinaten positionieren AWT, Swing, JavaFX & SWT 4
M dynamische Grafik in JFrame einbetten AWT, Swing, JavaFX & SWT 2
G Transparente Grafik über JMF Video zeichnen AWT, Swing, JavaFX & SWT 2
I Grafik in Text umwandeln AWT, Swing, JavaFX & SWT 11
G Grafik auf mehrere Methoden/Klassen zerlegen AWT, Swing, JavaFX & SWT 2
G Grafik in Button einbinden AWT, Swing, JavaFX & SWT 3
M Grafik in JFrame in Kombination mit Steuerelementen AWT, Swing, JavaFX & SWT 2
T grafik in jpanel wird nicht neugezeichnet AWT, Swing, JavaFX & SWT 7
F Zellen über eine Grafik legen AWT, Swing, JavaFX & SWT 7
S Grafik Farbwert verändern? AWT, Swing, JavaFX & SWT 8
D Farbe einer Grafik über den Cursor abfragen AWT, Swing, JavaFX & SWT 6
G Keine Anzeige von Grafik bei externem paintComponent-Aufruf AWT, Swing, JavaFX & SWT 2
S Popup auf Grafik AWT, Swing, JavaFX & SWT 18
J Grafik "sichtbar" verschieben AWT, Swing, JavaFX & SWT 2
G Grafik auf JComponent ohne Überschreiben von Paint-Methoden AWT, Swing, JavaFX & SWT 4
G Grafik erzeugen: eine Art Zustandsgraph eines Automaten AWT, Swing, JavaFX & SWT 7
P grafik in JScrollPanel AWT, Swing, JavaFX & SWT 5
D AppletCode als JAR aus JSP benutzen und als Grafik speichern AWT, Swing, JavaFX & SWT 2
S Update von Grafik auf JPanel AWT, Swing, JavaFX & SWT 2
S Auf einem JTabbedPane eine Grafik zeichnen AWT, Swing, JavaFX & SWT 11
W Grafik in JLabel aktualisieren AWT, Swing, JavaFX & SWT 4
S Tooltip mit Grafik AWT, Swing, JavaFX & SWT 2
D Visualisierung einer Selektion in einer Grafik. AWT, Swing, JavaFX & SWT 7
P Vektor-Grafik im XML-Format speichern AWT, Swing, JavaFX & SWT 39
P Grafik auf Button AWT, Swing, JavaFX & SWT 3
E Einträge der JComboBox werden durch Grafik verdeckt AWT, Swing, JavaFX & SWT 11
L Komponente und Grafik gleichzeitig auf JPanel zeichnen AWT, Swing, JavaFX & SWT 11
T swing - grafik schrittweise ausgeben ohne repaint() AWT, Swing, JavaFX & SWT 2
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
H Swing BufferedReader.close() hängt im SwingWorker AWT, Swing, JavaFX & SWT 1
D JavaFX Anwendung hängt sich permanent auf AWT, Swing, JavaFX & SWT 6
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
B Frame hängt sich auf trotz invokeLater AWT, Swing, JavaFX & SWT 1
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C JFileChooser hängt bei Ausführung mit Terminal AWT, Swing, JavaFX & SWT 2
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
P GUI hängt AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Desktop.open(file) hängt AWT, Swing, JavaFX & SWT 4
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
C Swing JTextfield hängt sich bei Eingabe auf AWT, Swing, JavaFX & SWT 6
C SWT Gui Thread hängt sich auf AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben