どこかでこれに似たものを見たような気がします。
ここで私はpublic static String iron = IronCount + " iron";
です。
私は、public int IronCount
が変更された場合、文字列のアイロンは変更されますが、TimerでIronCountが変更されている間は、少なくとも変化しないことを確認しました。
私の完全なコードは、(g.fillRect()
秒のすべてなし)ここにある:パブリックStringは文字列を変更しないのはなぜですか?
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
public class GeneratorAndGraphics extends JComponent {
private static final long serialVersionUID = 1L;
public int IronCount = 0, GoldCount = 0, DiamondCount = 0;
public String iron = IronCount + " iron"; //$NON-NLS-1$
public void paint(Graphics g) {
// vertical lines
Graphics2D g2d = (Graphics2D) g;
// iron generator
g.setColor(Color.BLACK);
g.drawRect(20, 20, 40, 40);
g.drawLine(20, 30, 60, 30);
g.setFont(new Font("Arial", Font.PLAIN, 9)); //$NON-NLS-1$
g.drawString("Iron Gen", 22, 30); //$NON-NLS-1$
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
IronCount++;
iron = IronCount + " iron"; // doesn't do anything
System.out.println(iron); // doens't print
}
},
500
);
g.drawString(iron, 25, 45);
}
}
私は鉄が変化するであろう、いつでもIronCountが変更されたことを思うだろうが、それはg.drawString(iron, 25, 45);
として見ていないいつも言う:私のJFrame上0 iron
は、 。
これはTimerのエラーである可能性があります。これはforループの繰り返し速度を遅くするなど、より良い代替方法をご希望です。
あなたは[MCVE]あなたのコードの含まことはできますか?あなたはおそらく 'paint'をオーバーライドしたくないでしょうし、塗料が呼び出されるたびに新しいタイマーの仕事をしたくないと確信しています。 – pvg