「java线程移动」java线程yield

博主:adminadmin 2023-03-20 14:18:06 293

本篇文章给大家谈谈java线程移动,以及java线程yield对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

编写JAVA线程两个正方形分别从左上角移动

lz 你好

我做了一个比较简单的雏形

绿色正方形水平随机运动

蓝色正方形垂直随机运动

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.math.*;

public class MoveRect extends Frame implements Runnable{

private Rectangle hRect, vRect;

private Image buffer;

private Object o = new Object();

public MoveRect(){

super("MoveRect");

hRect = new Rectangle(50,0,50,50);//水平随机运动的正方形

vRect = new Rectangle(0,50,50,50);//垂直随机运动的正方形

setUndecorated(true);

setLocation(500,200);

setSize(400,400);

setVisible(true);

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

}

//启动循环绘制(使正方形一直循环的运动)

public void circleDraw(){

}

//绘制正方形的状态

public void drawRect(Graphics g,Rectangle r){

g.drawRect(r.x, r.y, r.width, r.height);

}

//双缓冲机制(主要解决闪屏)

public void update(Graphics g){

buffer = createImage(getSize().width, getSize().height);

if(buffer != null){

Graphics g2 = buffer.getGraphics();

paint(g2);

g2.dispose();

g.drawImage(buffer, 0, 0, this);

}

else{

paint(g);

}

}

public void paint(Graphics g){

g.setColor(Color.GREEN);

drawRect(g,hRect);

g.setColor(Color.BLUE);

drawRect(g,vRect);

hRect.x = (int)(Math.random()*351);

vRect.y = (int)(Math.random()*351);

}

public void run(){

while(true){

stop();

rePaint();

}

}

//同步方法rePaint

public synchronized void rePaint(){

repaint();

}

//同步方法stop

public synchronized void stop(){

if(hRect.x = 50  vRect.y = 50){

try {

Thread.sleep(500);

}

catch (Exception ex) {

ex.printStackTrace();

}

}

}

public static void main(String[] args){

new Thread(new MoveRect()).start();

}

}

希望能帮助你哈

Java多线程移动的小球

同一个Thread不能start两次

这样改下

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

@SuppressWarnings("serial")

public class MoveBall02 extends JFrame {

private JButton jbtu = null;

private Ball02 ball = null;

Thread t = null;

public static void main(String[] args) {

new Test();

}

public Test() {

this.setTitle("移动的小球");

this.setSize(600, 500);

this.setLocation(100, 100);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

ball = new Ball02(40, 40);

this.add(ball);

t = new Thread(ball);

jbtu = new JButton("点击移动小球");

this.add(jbtu, BorderLayout.SOUTH);

jbtu.addActionListener(new MyActionListener());

this.setVisible(true);

}

class MyActionListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

if (e.getSource() == jbtu) {

// 响应鼠标点击事件

if (!t.isAlive()) {

t = new Thread(ball);

t.start();

}

}

}

}

}

@SuppressWarnings("serial")

class Ball02 extends JPanel implements Runnable {

private int x, y;

public Ball02(int x, int y) {

this.x = x;

this.y = y;

}

@Override

public void paint(Graphics g) {

super.paint(g);

g.setColor(Color.RED);

g.fillOval(x, y, 40, 40);

}

public void run() {

try {

for (int i = 0; i  20; i++) {

x = y += 3;

this.repaint();

Thread.sleep(100);

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

java多线程实现玩家移动功能?

加if判断,分线路。重复的线路比如a-b可以只写一个方法。用到就调用。

关于java线程移动和java线程yield的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。