analoge uhr die 10000 ;) - uhr läuft net so wie sie soll

  • Themenstarter Themenstarter mlt
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

mlt

Gast
so das ist mein code
Code:
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.*; 

public class DieUhr{

  public static void main(String[] args) { 
    Frame1 frame1 = new Frame1();
    Uhr uc = new Uhr();
    Thread t = new Thread (uc);
    t.start();
    uc.setRunFlag(false);
    
    frame1.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{ System.exit(0);
			}
		} );
    
   
    frame1.add(uc);
    frame1.setSize(500,500);
    frame1.show();
	uc.run();
    
}


} 

class Frame1 extends Frame
{
	public Frame1()
	{
	}
}

class Uhr extends Canvas implements Runnable{	
  int mitte = 250;
  Calendar date = new GregorianCalendar();

  int hours = date.get(Calendar.HOUR_OF_DAY);
  int minutes = date.get(Calendar.MINUTE);
  int seconds = date.get(Calendar.SECOND);
  
  
    private volatile boolean runFlag;
  public void setRunFlag (boolean runFlag) {
    this.runFlag = runFlag;
  }
  public boolean getRunFlag() {
    return this.runFlag;
  }
  public void run() {
    runFlag=true;
    while (runFlag) {
      
   xstu(date.get(Calendar.HOUR_OF_DAY));
   xmin(date.get(Calendar.MINUTE));
   xsek(date.get(Calendar.SECOND));
  
   
   	
		try 
		{
        	Thread.sleep(1000);
        }
        catch(InterruptedException e) 
        {
        }
            repaint();
		
      
      
    }
  }

  public void paint(Graphics g) { 
  
  g.setColor(Color.BLACK);
  g.fillRect(0,0,500,500);
  g.drawOval(240,240,20,20);
  g.setColor(Color.GRAY);
  g.fillRect(150,150,200,200);
  g.setColor(Color.BLACK);
  g.drawOval(240,240,20,20);
  
g.setColor(Color.WHITE);
  g.drawLine(
  mitte,mitte,mitte+(int)(60*Math.cos(Math.toRadians(hours%12*30+minutes/2.0-90))),
  mitte+(int)(60*Math.sin(Math.toRadians(hours%12*30+minutes/2.0-90))));
g.setColor(Color.WHITE);
  g.drawLine(
  mitte,mitte,mitte+(int)(85*Math.cos(Math.toRadians(minutes*6-90))),
  mitte+(int)(85*Math.sin(Math.toRadians(minutes*6-90))));
g.setColor(Color.RED);
  g.setColor(Color.RED);
  g.drawLine(
  mitte,mitte,mitte+(int)(90*Math.cos(Math.toRadians(seconds*6-90))),
  mitte+(int)(90*Math.sin(Math.toRadians(seconds*6-90))));
	

} 


	public void xstu(int xstunden)
	{
		hours=xstunden;
	}
	
		public void xmin(int xminuten)
	{
		minutes=xminuten;
	}
	
		public void xsek(int xsekunden)
	{
		seconds=xsekunden;
	}



}


ja die uhr wird zwar korrekt gezeichnet ... aber sie läuft halt net .. .weiß immo so garnicht woran es liegen kann ...
und naja ist mein erster thread den ich programmiere .... =/

mfg malte

ps: danke
 
hm danke für die antwort aber ich hab keine ahnung wie/wo ich des einbinden soll :shock: :?:
 
Ich sehe gerade du hast:
Code:
  Uhr uc = new Uhr();
    Thread t = new Thread (uc);
    t.start();
und
Code:
 uc.run();
Das uc.run() muss weg.
Und mach aus frame1.show() frame1.setVisible(true);
 
done. es tut sich nur leider net wirklich mehr als vorher ... ist vllt noch ein fehler in "Uhr" ?! 😳
 
Hab's dir mal repariert:
Code:
import java.awt.Color;
import java.awt.Graphics;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class DieUhr {

	public static void main(String[] args) {
		JFrame frame1 = new JFrame();
		Uhr uc = new Uhr();
		Thread t = new Thread(uc);
		t.start();
		
		frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		frame1.add(uc);
		frame1.setSize(500, 500);
		frame1.setVisible(true);

	}

}

class Uhr extends JPanel implements Runnable {
	int mitte = 250;
	int hours,minutes,seconds;

	public void run() {
		while (true) {

			Calendar date = new GregorianCalendar();

			hours = date.get(Calendar.HOUR_OF_DAY);

			minutes = date.get(Calendar.MINUTE);

			seconds = date.get(Calendar.SECOND);

			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
			}
			repaint();

		}
	}

	public void paint(Graphics g) {

		g.setColor(Color.BLACK);
		g.fillRect(0, 0, 500, 500);
		g.drawOval(240, 240, 20, 20);
		g.setColor(Color.GRAY);
		g.fillRect(150, 150, 200, 200);
		g.setColor(Color.BLACK);
		g.drawOval(240, 240, 20, 20);

		g.setColor(Color.WHITE);
		g.drawLine(mitte, mitte, mitte
				+ (int) (60 * Math.cos(Math.toRadians(hours % 12 * 30 + minutes
						/ 2.0 - 90))), mitte
				+ (int) (60 * Math.sin(Math.toRadians(hours % 12 * 30 + minutes
						/ 2.0 - 90))));
		g.setColor(Color.WHITE);
		g
				.drawLine(mitte, mitte, mitte
						+ (int) (85 * Math
								.cos(Math.toRadians(minutes * 6 - 90))), mitte
						+ (int) (85 * Math
								.sin(Math.toRadians(minutes * 6 - 90))));
		g.setColor(Color.RED);
		g.setColor(Color.RED);
		g
				.drawLine(mitte, mitte, mitte
						+ (int) (90 * Math
								.cos(Math.toRadians(seconds * 6 - 90))), mitte
						+ (int) (90 * Math
								.sin(Math.toRadians(seconds * 6 - 90))));

	}

}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben