写了一段代码,想实现下雪积雪效果,但是用for循环控制g.fillRect画矩形时,落雪效果消失了?

package plane;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;

public class Star {
public static void main (String[] args){
Frame w = new Frame(); //创建一个面板
w.setVisible(true); //显示面板,w.show();
w.setSize(800,600); //设置面板大小
w.setBackground(Color.BLACK); //设置背景颜色为黑色
MyJPanel p = new MyJPanel(); //创建了一个画布
w.add(p);
Thread t = new Thread(p); //创建一个线程
t.start(); //启动线程

}
}
class MyJPanel extends Panel implements Runnable{
int[] x = new int[100];
int[] y = new int[100];
public MyJPanel(){
for (int i = 0; i < 100; i++) {
x[i] = (int)(Math.random()*800);
y[i] = (int)(Math.random()*600);
}
}
public void paint(Graphics g){
g.setColor(Color.YELLOW);
g.fillOval(600,100,60,60);
g.setColor(Color.BLACK);
g.fillOval(580,100,60,60);
g.setColor(Color.WHITE);
for (int i = 0; i < 100; i++) {
g.drawString("*",x[i],y[i]);
}
/*for (int j = 0; j < 300; j--) {
for(int l=15;l>0;l--)
for(int m=100000;m>0;m--)
for(int n=81;n>0;n--);
g.fillRect(0,600,800,10*j);
}*/

}
public void run(){
while(true){
for (int i = 0; i < 100; i++) {
if(y[i]+1<=600){
y[i]++;
}else{
y[i]=0;
}
}
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}
控制矩形的是注销的for循环代码

泛舟湖上清波郎朗
浏览 231回答 2
2回答

MYYA

arges你是main方法穿进来的参数 也就是一个String数组如果你用jdk来执行这个类的class文件的时候你输入 比如你这个是test.class你输入 java test 11 22 33这个时候arges 数组的值就是11 22 33 也就是有三个值 这个时候 arges.length就等于3现在知道arges.length!=3的意思了把下边的 iPara1 = Integer.parseInt(arges[0]);是给iPrar1 赋值 Integer.parseInt() 这个方法是把字符串转换成int感觉这里写错了 应该写成 if(arges.length==3)这个if else加起来的意思就是判断 arges是不是有三个值 如果是就把它们的值赋给int iPara1,iPara2,iEnd;如果不是就打印输出一些信息希望能解决您的问题。

桃花长相依

你这里会有一个问题,就是你的x,y没有任何保护。当UI开始画东西的时候,需要用到x,y的数值。而这个时候,你的线程也会修改x,y的数值。只靠sleep来暂停工作线程不能保证你的数值在UI更新之后才更新的。
打开App,查看更多内容
随时随地看视频慕课网APP