L
Lukas L
Gast
Hallo
Ich bin im Web auf folgendes Lernbeispiel im Zusammenhang mit Applets gestossen - siehe Klasse Ticker. Es handelt sich um ein Applet, das mittels Thread einen Text als Ticker von links nach rechts laufend ausgibt. Zum Vergleich die Klasse Ticker2, die das gleiche macht ohne Thread. Was spricht gegen Ticker2? Wo ist der Vorteil bei der Thread-Variante? Vielen Dank für die Erklärung!
Ich bin im Web auf folgendes Lernbeispiel im Zusammenhang mit Applets gestossen - siehe Klasse Ticker. Es handelt sich um ein Applet, das mittels Thread einen Text als Ticker von links nach rechts laufend ausgibt. Zum Vergleich die Klasse Ticker2, die das gleiche macht ohne Thread. Was spricht gegen Ticker2? Wo ist der Vorteil bei der Thread-Variante? Vielen Dank für die Erklärung!
Code:
public class Ticker extends Applet implements Runnable {
private String m_strText;
private int m_intTextWidth;
private Thread m_thread;
private int m_intX;
private int m_intY;
private static final long serialVersionUID = 1L; // ???
public void init() {
FontMetrics fm;
m_strText=this.getParameter("Text");
fm=this.getFontMetrics(this.getFont());
m_intTextWidth=fm.stringWidth(m_strText);
m_intX=0-m_intTextWidth;
m_intY=this.getSize().height/2;
}
public void paint(Graphics g) {
g.drawString(m_strText, m_intX, m_intY);
}
public void start() {
if (m_thread==null) {
m_thread=new Thread(this);
m_thread.start();
}
}
public void stop() {
m_thread=null;
}
public void run() {
while (m_thread==Thread.currentThread()) {
if (m_intX<this.getSize().width) {
m_intX=m_intX+5;
} else {
m_intX=0-m_intTextWidth;
}
this.repaint();
try {
// Thread.sleep(100);
m_thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Code:
public class Ticker2 extends Applet {
private String m_strText;
private int m_intTextWidth;
private int m_intX;
private int m_intY;
private static final long serialVersionUID = 1L; // ???
public void init() {
FontMetrics fm;
m_strText=this.getParameter("Text");
fm=this.getFontMetrics(this.getFont());
m_intTextWidth=fm.stringWidth(m_strText);
m_intX=0-m_intTextWidth;
m_intY=this.getSize().height/2;
}
public void paint(Graphics g) {
g.drawString(m_strText, m_intX, m_intY);
if (m_intX<this.getSize().width) {
m_intX=m_intX+5;
} else {
m_intX=0-m_intTextWidth;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.repaint();
}
}