而循环只循环一次-java
为什么我的while循环只循环一次?它应该循环99次。Thread.sleep方法能否打破此循环或重新绘制?你能帮我解决这个问题吗?它没有显示任何错误。我正在使用netbeans Licznik.java:而循环只循环一次-java,java,loops,while-loop,Java,Loops,While Loop,为什么我的while循环只循环一次?它应该循环99次。Thread.sleep方法能否打破此循环或重新绘制?你能帮我解决这个问题吗?它没有显示任何错误。我正在使用netbeans Licznik.java: import javax.swing.JApplet; public class Licznik extends JApplet { @Override public void init() { setSize(900,900); P
import javax.swing.JApplet;
public class Licznik extends JApplet {
@Override
public void init() {
setSize(900,900);
PanelLicznik pl=new PanelLicznik();
add(pl);
}
}
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.geom.*;
import java.awt.geom.Line2D;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class PanelLicznik extends JPanel implements Runnable
{
int srodek = 450;
Image bg;
int a = 400, t = 0, v = 0, i = 0;
double x = 152, y = 756;
public PanelLicznik() {
Thread watek1 = new Thread(this);
watek1.start();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(900, 900);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
bg = new ImageIcon(this.getClass().getResource("s.gif")).getImage();
g2.drawImage(bg,0,0,null);
Line2D wsk = new Line2D.Double(srodek,srodek,x,y);
g2.setColor(new Color(255,255,255));
g2.setStroke(new BasicStroke(15.0f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER));
g2.draw(wsk);
}
@Override
public void run() {
t = 3;
v = 100;
i = 0
while(i < v){
try{
Thread.sleep(100);
}
catch(Exception ek) {}
double stopien = 231.4 - ((360*v)/280);
double radSek = Math.toRadians(stopien);
x = srodek + (a * Math.cos(radSek));
y = srodek - (a * Math.sin(radSek));
repaint();
i++;
}
}
}
panelicznik.java:
import javax.swing.JApplet;
public class Licznik extends JApplet {
@Override
public void init() {
setSize(900,900);
PanelLicznik pl=new PanelLicznik();
add(pl);
}
}
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.geom.*;
import java.awt.geom.Line2D;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class PanelLicznik extends JPanel implements Runnable
{
int srodek = 450;
Image bg;
int a = 400, t = 0, v = 0, i = 0;
double x = 152, y = 756;
public PanelLicznik() {
Thread watek1 = new Thread(this);
watek1.start();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(900, 900);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
bg = new ImageIcon(this.getClass().getResource("s.gif")).getImage();
g2.drawImage(bg,0,0,null);
Line2D wsk = new Line2D.Double(srodek,srodek,x,y);
g2.setColor(new Color(255,255,255));
g2.setStroke(new BasicStroke(15.0f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER));
g2.draw(wsk);
}
@Override
public void run() {
t = 3;
v = 100;
i = 0
while(i < v){
try{
Thread.sleep(100);
}
catch(Exception ek) {}
double stopien = 231.4 - ((360*v)/280);
double radSek = Math.toRadians(stopien);
x = srodek + (a * Math.cos(radSek));
y = srodek - (a * Math.sin(radSek));
repaint();
i++;
}
}
}
在
之前重置i
,而
v = 100;
i = 1; // if you want 99 times
while (i<v) { ...
v=100;
i=1;//如果你想要99次
while(iReseti
在while
v = 100;
i = 1; // if you want 99 times
while (i<v) { ...
v=100;
i=1;//如果你想要99次
while(iYouri
是全局的,您从不重置它。除了变量重置问题,Thread.sleep()可能是一个问题:您的i
是全局的,您从不重置它。除了变量重置问题,Thread.sleep()可能是一个问题可能是一个问题:或者更好的做法是,将i
也设为该方法的局部变量。我添加了它,但它仍然循环一次:(向我们展示方法repaint()
。我怀疑您在repaint()中做了一些操作)
修改i
。否则将v=100;i=1;
替换为int ax=100;int bx=1;
并在循环中适当地替换v
和i
,看看它是否仍然只循环一次。我将其更改为ax和bx,但它没有帮助。我不明白显示“重新绘制”是什么意思。我没有做任何事情你确定repaint()没有更改吗?我正在尝试查看循环还会在哪里中断,到目前为止还看不到任何其他问题。或者更好的是,将I
也作为该方法的局部变量。我添加了它,但它仍然循环一次:(向我们展示方法repaint()
。我怀疑你在repaint()中做了一些事情)
修改i
。否则将v=100;i=1;
替换为int ax=100;int bx=1;
并在循环中适当地替换v
和i
,看看它是否仍然只循环一次。我将其更改为ax和bx,但它没有帮助。我不明白显示“重新绘制”是什么意思。我没有做任何事情你确定repaint()没有更改吗?我正在尝试查看循环还会在哪里中断,目前还看不到任何其他问题。