Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java图形在计时器中不工作_Java_Animation_Graphics_Timer_Paint - Fatal编程技术网

Java图形在计时器中不工作

Java图形在计时器中不工作,java,animation,graphics,timer,paint,Java,Animation,Graphics,Timer,Paint,我正在用java编写一个小游戏。为此,我想打印一个对话框,其中包含一些文本,以便与游戏中的人交谈 public static void printConBox(Graphics g, String firstLine, String secondLine, String thirdLine, String fourthLine){ g.setColor(Color.WHITE); g.fillRect(x, y, 600, 180); g.setColor(Col

我正在用java编写一个小游戏。为此,我想打印一个对话框,其中包含一些文本,以便与游戏中的人交谈

    public static void printConBox(Graphics g, String firstLine, String secondLine, String thirdLine, String fourthLine){
    g.setColor(Color.WHITE);
    g.fillRect(x, y, 600, 180);
    g.setColor(Color.BLACK);
    Timer timer = new Timer();
    timer.schedule(new TimerTask(){

        @Override
        public void run() {
            if(i <= firstLine.length() - 1){
                char c = firstLine.charAt(i);
                i++;
                String s = "" + c;
                System.out.print(s);
                g.drawString(s, xdif, y + 25);
                xdif += 15;
            }else{
                timer.cancel();
            }
        }

    }, 0, 100);}
publicstaticvoidprintconbox(图形g、字符串第一行、字符串第二行、字符串第三行、字符串第四行){
g、 setColor(Color.WHITE);
g、 fillRect(x,y,600,180);
g、 设置颜色(颜色为黑色);
定时器=新定时器();
timer.schedule(新TimerTask(){
@凌驾
公开募捐{
如果(i
public void actionPerformed(ActionEvent e){
if(Conversation.i
public void actionPerformed(ActionEvent e){

if(Conversation.i)图形对象仅在接收它的paint方法的持续时间内有效。您不能“保存”它以供以后在延迟计时器任务中使用。计时器必须更改相关数据,然后通知组件重新绘制(部分)本身。请注意,由于线程问题,在使用AWT和swing时,最好使用javax.swing.Timer而不是java.util.Timer。好的,谢谢,我会尝试一下…:)图形对象仅在接收它的paint方法期间有效。您不能“保存”它供以后在延迟计时器任务中使用。计时器必须更改相关数据,然后告诉组件重新绘制(部分)自身。请注意,在处理AWT和swing时,最好使用javax.swing.timer而不是java.util.timer,因为线程问题。好的,谢谢,我将尝试它…:)我解决了它:)特别感谢VGR,这是一个很大的帮助。如果有人想看到解决方案,请在这里添加评论…我解决了:)特别感谢VGR,这是一个很大的帮助。如果有人想看到解决方案,请在这里添加评论。。。
    public void actionPerformed(ActionEvent e){ 
    if(Conversation.i <= firstLine.length() - 1){
        char c = firstLine.charAt(Conversation.i);
        Conversation.i++;
        String s = "" + c;
        System.out.print(s);
        g.drawString(s, Conversation.xdif, Conversation.y + 25);
        Conversation.xdif += 15;
        Conversation.timer.restart();
    }else{
        Conversation.timer.stop();
    }
}