Hallo
Ich bin Lernender Informatiker im 2. Lehrjahr und ein totaler Anfänger in Java.
Ich muss für meine Abteilung ein Applet programmieren, welches eine Analog Uhr anzeigt und Hostname und IP Adresse ausliest. Das Applet ist nur eine Demo für ein Ant Skript und sieht deshalb auch ziemlich billig aus.
Ich habe aber das Problem, dass der Hostname und IP Adresse im Browser flackert und ich bringe das nicht weg. Im Appletviewer funktionierts aber im Browser nicht.
Woran liegts?
Ich bin Lernender Informatiker im 2. Lehrjahr und ein totaler Anfänger in Java.
Ich muss für meine Abteilung ein Applet programmieren, welches eine Analog Uhr anzeigt und Hostname und IP Adresse ausliest. Das Applet ist nur eine Demo für ein Ant Skript und sieht deshalb auch ziemlich billig aus.
Ich habe aber das Problem, dass der Hostname und IP Adresse im Browser flackert und ich bringe das nicht weg. Im Appletviewer funktionierts aber im Browser nicht.
Java:
package TestApplet;
import java.awt.*;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import javax.swing.JApplet;
public class Main extends JApplet implements Runnable {
private static final long serialVersionUID = 2752628346220939031L;
Color farbe;
static String ipAddr;
static String hostname;
Image buffer;
Graphics2D gBuffer;
private Image offScreenImage;
private Dimension offScreenSize;
private Graphics offScreenGraphics;
Thread runner;
Calendar date;
int nn=100, r=80;
public void init() {
this.setBackground(new Color(255,255,255));
this.setSize(1280, 1024);
try {
ipAuslesen();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void ipAuslesen() throws UnknownHostException, IOException {
try {
InetAddress addr = InetAddress.getLocalHost();
ipAddr = addr.getHostAddress();
hostname = addr.getHostName();
}
catch (UnknownHostException e) {
}
}
public void start() {
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}
public void stop() {
if (runner != null) {
runner.stop();
runner = null;
}
}
public void run() {
while (true) {
repaint();
try {
Thread.sleep(0);
}
catch (InterruptedException e) {
}
}
}
public void paint(Graphics g) {
g.drawString("IP Adresse: " + ipAddr, 35, 220);
g.drawString("Hostname: " + hostname, 35, 250);
// Double Buffering
if (buffer==null) {
buffer=createImage(this.getSize().width, this.getSize().height);
gBuffer=(Graphics2D)buffer.getGraphics();
}
gBuffer.clearRect(0,0,this.getSize().width, this.getSize().height);
// Antialiasing
gBuffer.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
gBuffer.setColor(new Color(0,0,0));
gBuffer.drawOval(nn-2,nn-2,4,4);
// Striche bei 3, 6, 9 und 12 Uhr
for (int i=0; i<4; i++) {
gBuffer.drawLine(
nn+(int)((r-7)*Math.cos(Math.toRadians(90*i))),
nn+(int)((r-7)*Math.sin(Math.toRadians(90*i))),
nn+(int)(r*Math.cos(Math.toRadians(90*i))),
nn+(int)(r*Math.sin(Math.toRadians(90*i))));
}
// Striche bei jeder Stunde
for (int i=0; i<12; i++) {
gBuffer.drawLine(
nn+(int)((r-5)*Math.cos(Math.toRadians(30*i))),
nn+(int)((r-5)*Math.sin(Math.toRadians(30*i))),
nn+(int)(r*Math.cos(Math.toRadians(30*i))),
nn+(int)(r*Math.sin(Math.toRadians(30*i))));
}
// Striche bei jeder Minute
for (int i=0; i<60; i++) {
gBuffer.drawLine(
nn+(int)((r-2)*Math.cos(Math.toRadians(6*i))),
nn+(int)((r-2)*Math.sin(Math.toRadians(6*i))),
nn+(int)(r*Math.cos(Math.toRadians(6*i))),
nn+(int)(r*Math.sin(Math.toRadians(6*i)))); ;
}
date = new GregorianCalendar();
int hours = date.get(Calendar.HOUR_OF_DAY);
int minutes = date.get(Calendar.MINUTE);
int seconds = date.get(Calendar.SECOND);
// Stunden
gBuffer.drawLine(
nn,nn,nn+(int)(60*Math.cos(Math.toRadians(hours%12*30+minutes/2.0-90))),
nn+(int)(60*Math.sin(Math.toRadians(hours%12*30+minutes/2.0-90))));
// Minuten
gBuffer.drawLine(
nn,nn,nn+(int)(85*Math.cos(Math.toRadians(minutes*6-90))),
nn+(int)(85*Math.sin(Math.toRadians(minutes*6-90))));
// Sekunden
gBuffer.setColor(new Color(170,170,170));
gBuffer.drawLine(
nn,nn,nn+(int)(90*Math.cos(Math.toRadians(seconds*6-90))),
nn+(int)(90*Math.sin(Math.toRadians(seconds*6-90))));
g.drawImage(buffer, 0, 0, this);
}
public final synchronized void update(Graphics g) {
Dimension d = getSize();
if((offScreenImage == null) || (d.width != offScreenSize.width) || (d.height != offScreenSize.height)) {
offScreenImage = createImage(d.width, d.height);
offScreenSize = d;
offScreenGraphics = offScreenImage.getGraphics();
}
offScreenGraphics.clearRect(0, 0, d.width, d.height);
paint(offScreenGraphics);
g.drawImage(offScreenImage, 0, 0, 0, 0, null);
}
}
Woran liegts?