import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MainForm extends Frame implements Runnable{ /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MainForm();
}
Graphics g;
public MainForm()
{
this.setBounds(100, 100, 800, 800); for(int i=0;i<=270;i+=90)
{
Thread th=new Thread(this);
th.setName(String.valueOf(0));
th.start();
}
g=this.getGraphics();
this.setVisible(true);
}
public void paint(Graphics e)
{
g=e;
}
public void run(){
String star=Thread.currentThread().getName();
int start=0;
for(int i=1;i<=90;i++)
{
//问题处在这里,这里的g报异常空值
g.drawArc(100, 100, 600, 600, start, i);
try {
Thread.sleep(10);
} catch (InterruptedException x) {
// TODO Auto-generated catch block
x.printStackTrace();
}
}
}这段代码目的是想在0.90.180.270 处利用多线程 同时绘制4段圆弧 然后连接 , 现在问题是g是空值 无法绘图 请指教或者给出解决办法代码也行 谢谢拉
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Timer;
import java.util.TimerTask;public class DrawArcTest {
public static void main(String[] args){
new ArcFrame();
}
}
class ArcFrame extends Frame{
int count=0;
int flag=-2;
public ArcFrame(){
this.setSize(500, 500);
this.setLocation(200, 200);
this.addWindowListener(new WindowAdapter() { @Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
TimerTask tk=new TimerTask() {
public void run() {
ArcFrame.this.repaint();
}
};
Timer t=new Timer();
t.schedule(tk, 0, 100);
this.setVisible(true);
}
@Override
public void paint(Graphics g) {
if(count==90||count==0){
flag=-flag;
}
count+=flag;
g.drawArc(50, 50, 300, 300, 0, count);
g.drawArc(50, 50, 300, 300, 90, count);
g.drawArc(50, 50, 300, 300, 180, count);
g.drawArc(50, 50, 300, 300, 270, count);
}
}
flag=-flag;
}
这段没有用,count永远不会等于90或者0,count值是20递减的,即-20,-40,-80,-100...
依照楼主的意思,把一楼的代码再改下:
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Timer;
import java.util.TimerTask;public class DrawArcTest {
public static void main(String[] args){
new ArcFrame();
}
}
class ArcFrame extends Frame{
int count=0;
int flag=-2;
Timer t;
public ArcFrame(){
this.setSize(500, 500);
this.setLocation(200, 200);
this.addWindowListener(new WindowAdapter() { @Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
TimerTask tk=new TimerTask() {
public void run() {
ArcFrame.this.repaint();
}
};
t=new Timer();
t.schedule(tk, 0, 100);
this.setVisible(true);
}
@Override
public void paint(Graphics g) {
count+=flag;
g.drawArc(50, 50, 300, 300, 0, count);
g.drawArc(50, 50, 300, 300, 90, count);
g.drawArc(50, 50, 300, 300, 180, count);
g.drawArc(50, 50, 300, 300, 270, count);
if(count == -80)t.cancel();
}
}count+=flag;
g.drawArc(50, 50, 300, 300, 0, count);
g.drawArc(50, 50, 300, 300, 90, count);
g.drawArc(50, 50, 300, 300, 180, count);
g.drawArc(50, 50, 300, 300, 270, count);
if(count == -80)
count+=flag;
g.drawArc(50, 50, 300, 300, 0, count);
g.drawArc(50, 50, 300, 300, 90, count);
g.drawArc(50, 50, 300, 300, 180, count);
g.drawArc(50, 50, 300, 300, 270, count);
if(count == -80)
是多余的没复制好~