日期:2014-05-20  浏览次数:20708 次

main函数的代码放在一个构造函数中不能运行!
[code=Java][/code]

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;
 
public class StopWatch extends Canvas implements Runnable {
 private long startTime=0;
 private long endTime=0;
 private boolean bStart =false;  
 
 public StopWatch(){
  enableEvents(AWTEvent.MOUSE_EVENT_MASK);
  setSize(300,200);
 }
 
 protected void processMouseEvent(MouseEvent e){
  if (e.getID() == MouseEvent.MOUSE_PRESSED) {
  bStart = true;
  new Thread(this).start();
  startTime = endTime =System.currentTimeMillis();
  repaint();
  }else if (e.getID() == MouseEvent.MOUSE_RELEASED) {
  endTime = System.currentTimeMillis();
  repaint();
  bStart = false;
  }
 }
  
 public void paint(Graphics g){
  SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
  Date elapseTime =null;
   
  try {
  elapseTime =sdf.parse("00:00:00");
  } catch (ParseException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
  elapseTime.setTime(endTime-startTime+elapseTime.getTime());
  g.draw3DRect(50, 50, 300, 100, true);
  // g.drawRect(45, 45, 400, 150);
  g.setFont(new Font("斜体", Font.ITALIC, 30));
  g.setColor(Color.red);
  String display = sdf.format(elapseTime);
  g.drawString(display, 150, 100);
 }
  
 public void run(){
  while (bStart) {
  try {
  Thread.sleep(300);
  } catch (Exception e) {
  // TODO: handle exception
  e.printStackTrace();
  }
  endTime = System.currentTimeMillis();
  repaint();
  }
 }

 
 
public static void main(String[] args) {
 // TODO Auto-generated method stub
 StopWatch sw = new StopWatch();
 Frame f = new Frame();
 f.add(new StopWatch());
 f.setSize(800, 800);
 f.setVisible(true);
 }
 
}

 
 
请问为什么我把main函数中的代码“
Frame f = new Frame();
 f.add(new StopWatch());
 f.setSize(800, 800);
 f.setVisible(true);

放在构造函数“public StopWatch(){
  code..
  }”就出现问题了,这是为什么哈!问题补充: 

我突然想到是“递归”造成的死循环?请问,我是理解对还是不对?


------解决方案--------------------
Java code

Frame f = new Frame();
 f.add([color=#FF0000]new StopWatch()[/color]);
 f.setSize(800, 800);
 f.setVisible(true);
 }

------解决方案--------------------
“我突然想到是“递归”造成的死循环?请问,我是理解对还是不对?”
我觉得楼主理解的对!我也认为是递归造成的。
------解决方案--------------------
public static void main(String[] args) {
// TODO Auto-generated method stub
StopWatch sw = new StopWatch();
Frame f = new Frame();
f.add(new StopWatch());
f.setSize(800, 800);
f.setVisible(true);
}

假设你放在构造里
分析一下这个代码,先实例化一个StopWatch ,然后实例化Frame ,然后你调用 f.add(new StopWatch());
这个方法,你有没有发现,你又重新实例化了StopWatch 然后又要进入构造方法里,又去实例化Frame ,一直在操作这样的动作
------解决方案--------------------
是OutOfMemory吗?