Felix Z.
18-12-2003, 20:41
Hallo an alle,
Ich versuche mich an einer einfachen Karte zur Standortanzeige.
Das ganze soll am Ende einfach ein kleines Programm sein, dass auf einer Karte einen bestimmten Standort anzeigt, der ihm vorher als Parameter übergeben wurde. Eine ganz simple Übung also.
Dieser Punkt soll blinken - ich habe das so realisiert, dass von den Farbanteilen je Threaddurchlauf 5 abgezogen/addiert werden (RGB).
Hier ist mein bisheriger Code:
import javax.swing.*;
import java.awt.*;
public class Map
extends JFrame
{
int par0 = 0;
int par1 = 0;
int rc = 255;
int gc = 255;
int bc = 255;
public Map()
{
}
public Map(String par0, String par1)
{
setSize(640,480);
setBackground(Color.white);
this.par0 = Integer.parseInt(par0);
this.par1 = Integer.parseInt(par1);
setTitle("Standpunkt von:");
}
public void paint(Graphics g)
{
g.setColor(new Color(rc,gc,bc));
g.drawOval(par0,par1,10,10);
g.fillOval(par0,par1,10,10);
}
public static void main(String args[])
{
if(args.length < 1)
{
System.out.println("Programmaufruf benötigt 2 Argumente");
System.exit(0);
}
String par0 = "";
String par1 = "";
par0 = args[0].toString();
par1 = args[1].toString();
Map bk = new Map(par0,par1);
bk.show();
Thread mainThread = new Thread(bk.new mainThread());
mainThread.start();
}
class mainThread implements Runnable
{
int Richtung = 0;
public void run()
{
while(true)
{
if(Richtung == 0)
{
gc -= 5;
bc -= 5;
if(gc == 0 && bc == 0)
{
Richtung = 1;
}
}
else
{
gc += 5;
bc += 5;
if(gc == 255 && bc == 255)
{
Richtung = 0;
}
}
repaint();
try
{
Thread.sleep(1);
}
catch(InterruptedException ie)
{
break;
}
}
}
}
}
Soweit so gut.
Eigentlich funktioniert das ohne Probleme, doch als ich das Programm unter Windows getestet habe, stellte ich fest, dass die Intervalle des ein- und ausblendens viel höher sind als unter Linux.
Wie kann ich mir das erklären?
Behandelt Windows Threads anders als Linux?
Ich versuche mich an einer einfachen Karte zur Standortanzeige.
Das ganze soll am Ende einfach ein kleines Programm sein, dass auf einer Karte einen bestimmten Standort anzeigt, der ihm vorher als Parameter übergeben wurde. Eine ganz simple Übung also.
Dieser Punkt soll blinken - ich habe das so realisiert, dass von den Farbanteilen je Threaddurchlauf 5 abgezogen/addiert werden (RGB).
Hier ist mein bisheriger Code:
import javax.swing.*;
import java.awt.*;
public class Map
extends JFrame
{
int par0 = 0;
int par1 = 0;
int rc = 255;
int gc = 255;
int bc = 255;
public Map()
{
}
public Map(String par0, String par1)
{
setSize(640,480);
setBackground(Color.white);
this.par0 = Integer.parseInt(par0);
this.par1 = Integer.parseInt(par1);
setTitle("Standpunkt von:");
}
public void paint(Graphics g)
{
g.setColor(new Color(rc,gc,bc));
g.drawOval(par0,par1,10,10);
g.fillOval(par0,par1,10,10);
}
public static void main(String args[])
{
if(args.length < 1)
{
System.out.println("Programmaufruf benötigt 2 Argumente");
System.exit(0);
}
String par0 = "";
String par1 = "";
par0 = args[0].toString();
par1 = args[1].toString();
Map bk = new Map(par0,par1);
bk.show();
Thread mainThread = new Thread(bk.new mainThread());
mainThread.start();
}
class mainThread implements Runnable
{
int Richtung = 0;
public void run()
{
while(true)
{
if(Richtung == 0)
{
gc -= 5;
bc -= 5;
if(gc == 0 && bc == 0)
{
Richtung = 1;
}
}
else
{
gc += 5;
bc += 5;
if(gc == 255 && bc == 255)
{
Richtung = 0;
}
}
repaint();
try
{
Thread.sleep(1);
}
catch(InterruptedException ie)
{
break;
}
}
}
}
}
Soweit so gut.
Eigentlich funktioniert das ohne Probleme, doch als ich das Programm unter Windows getestet habe, stellte ich fest, dass die Intervalle des ein- und ausblendens viel höher sind als unter Linux.
Wie kann ich mir das erklären?
Behandelt Windows Threads anders als Linux?