首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么整数不变?java

为什么整数不变?java
EN

Stack Overflow用户
提问于 2012-10-31 02:59:57
回答 1查看 150关注 0票数 0

请有人告诉我如何在下面的代码中得到int的值:当我向左和向右移动正方形时,Test的输出将保持为500。

我希望线程在测试中每次循环时得到x的值,但是x总是500 (从线程),即使x的值在Drawing.java中正在改变。请帮我处理这个。

代码语言:javascript
复制
package block;


public class Test extends Drawing implements Runnable{
Thread collision = new Thread(this);

public Test() {
    collision.start();
}

@Override
public void run() {

    while(true) {
        System.out.println(x);
    }
}

}

代码语言:javascript
复制
package block;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Drawing extends Canvas implements Runnable, KeyListener{
Thread thread = new Thread(this);

int x = 500;
int y = 540;
public Drawing() {        
    setSize(1000, 800);
    addKeyListener(this);
    thread.start();
}

public void update(Graphics g) {
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, 1000, 700);
    paint(g);
}

public void paint(Graphics g) {
    g.setColor(Color.cyan);
    g.fillRect(x, y, 50, 50);
}

@Override
public void run() {
    while(true) {
        repaint();
        try {
            Thread.sleep(100);
        } catch (InterruptedException ex) {
            Logger.getLogger(Drawing.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}

@Override
public void keyTyped(KeyEvent ke) {

}

@Override
public void keyPressed(KeyEvent ke) {
    if(ke.getKeyCode() == KeyEvent.VK_LEFT) {
        x -= 5;
    }
    if(ke.getKeyCode() == KeyEvent.VK_RIGHT) {
        x += 5;
    }
}

@Override
public void keyReleased(KeyEvent ke) {

}

}

编辑:?

代码语言:javascript
复制
package block;

import javax.swing.JFrame;


public class Block extends JFrame{

    Test test = new Test();

    public Block() {
        setSize(1000, 700);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);        
        add(new Drawing());        
        setVisible(true);
        createBufferStrategy(2);
    }

    public static void main(String[] args) {
        new Block();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-31 03:12:01

您正在创建多个x实例,因为您没有正确地使用继承。调用new Test()时,这将创建Test的一个实例(其中包含一个Drawing,其中包含一个成员x),然后对new Drawing()的调用将创建Drawing的另一个实例(该实例包含一个不同的成员x)。

要解决这个问题,可以将对Drawing对象的引用传递给Test构造函数,并通过引用访问x成员。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13150667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档