`
wanwok
  • 浏览: 30493 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

j2se工程中有多个main()方法

阅读更多
   [color=cyan] 学习java以来,都是按照书上的一些例子,做一些练习。写的东西都是按照书上说的思路,所以很少发现工程方面的问题。
    最近在做一个网站的维护,我发现他们的源码里,很多的类都写了main()方法。这些类的一个特点都是在工程启动的时候就需要加载的,而且main()方法的作用也差不多是执行一下当前类的构造函数。
    按照自己的理解,一个工程一般只有一个main()方法,没有必要写多个主方法。但由于代码是高人所写,所以让我觉得很不好理解的。希望知道的朋友帮忙指点哈子。
[/color]
分享到:
评论
10 楼 wanwok 2008-05-22  
现在我也觉得应该是做测试做的.
9 楼 魔力猫咪 2008-05-20  
好像是给类做初始化。不过怎么调用这个实例呢?实例变量是Main的临时变量。有没有调用Main的代码?
8 楼 wanwok 2008-05-20  
先贴一个吧.要不然把贴子拉的太长了
7 楼 wanwok 2008-05-20  
public class GetRealData extends Thread {
  private DatagramSocket datasocket=null;//udp socket 对象
  private Vector vectStore=null;//未保存的实时数据Vector
  private Vector vectProcess=null;//未处理的实时数据Vector

  private RunLog runlog=new RunLog();
  private LogInfo loginfo=new LogInfo("RealAnalyze");

  //构造函数
  public GetRealData(Vector vctStore,Vector vctProcess) {
    this.vectStore=vctStore;
    this.vectProcess=vctProcess;
    init();
  }
  public static void main(String[] args) {
    Vector  vect=new Vector(10);
    Vector  vect1=new Vector(10);
    GetRealData getRealData1 = new GetRealData(vect,vect1);
  }

  //线程主程序
  public void run(){
    //upd 数据包
    DatagramPacket p = null;

    //保存实时数据
    byte[]  bt=new byte[4096];

    //初始化upd 包的缓冲区
    try {
      byte[] buf = new byte[datasocket.getReceiveBufferSize()];
      p = new DatagramPacket(buf, buf.length);
    }
    catch (SocketException ex1) {
      loginfo.setFatal("getrealData 初始化socket数据时发生SocketException错误"+ex1.getMessage());
    }
//    RandomAccessFile fl=null;
//    try {
//      fl = new RandomAccessFile("c://test1.txt","rwd");
//    }
//    catch (Exception ex2) {
//    }
    //保存数据的长度
   // System.out.println("start");
    int datleng=0;
    //变量
    int i=0;
    while(true){
      try {
        //接收数据包
    // System.out.println("start1");
        datasocket.receive(p);
        //System.out.println("start2");
        //得到udp数据包
        bt=p.getData();
        //得到udp数据包长度
        datleng=p.getLength();
        //把接收到的数据前面为0的数据去掉
        for(i=0;i<datleng;i++){
            if(bt[i]>0) break;
        }

vectProcess.add(new String(bt,i,datleng-i,"gb2312"));
        try {
          loginfo.setDebug(new String(bt, i, datleng - i, "gb2312"));
        }
        catch (UnsupportedEncodingException ex3) {
        }
      }
      catch (IOException ex) {
        loginfo.setFatal("接收socket时发生IOException错误:"+ex.getMessage());
      }
      catch(Exception ex){
        loginfo.setFatal("接收socket时发生不明错误:" +
                           ex.getMessage());
      }

      //等待
      try {
        sleep(2);
      }
      catch (InterruptedException ex2) {
      }
    }
  }


  //初始化udp侦听,端口号
  private boolean init(){
    try {
      int iport=getPort();
      if(iport==0){
        loginfo.setFatal("取UDP侦听端口号出错!");
        return false;
      }
      //设置端口号
      datasocket = new DatagramSocket(iport);
      //设置缓冲池
      datasocket.setReceiveBufferSize(4096);
    }
    catch (SocketException ex) {
      loginfo.setFatal("初始化socket时发生SocketException错误:" + ex.getMessage());
      return false;
    }
    return true;
  }

  //从配置文件中读取端口号
  private int getPort(){
    try {
      SAXBuilder sb = new SAXBuilder();
      Document doc = null;
//     doc = sb.build(getClass().getResourceAsStream("config/realconf.xml"));
       doc = sb.build(new FileReader("realconf.xml"));
      Element el = doc.getRootElement();
      if (el.getName().compareToIgnoreCase("realconf") != 0) {
        return 0;
      }
      List lst = el.getChildren();
      for (int i = 0; i < lst.size(); i++) {
        el = (Element) lst.get(i);
        if (el.getName().compareToIgnoreCase("reallisten") == 0) {
          Element portel = el.getChild("port");
          return Integer.parseInt(portel.getText() == null?"0":
                                  portel.getText());
        }
      }
    }
    catch (JDOMException ex) {
      loginfo.setError("取UDP实时数据端口时出FileNotFoundException错:"+ex.getMessage());
      return 0;
    }
    catch(IOException ex){
      loginfo.setError("取UDP实时数据端口时出IOException错:"+ex.getMessage());
      return 0;
    }
    return 0;
  }
}
6 楼 jiyanliang 2008-05-20  
可以把代码贴出来看看阿,看了代码大家不就都清楚了吗。
5 楼 wanwok 2008-05-20  
不是网站.我说的不够清楚.这是一个单独辅助程序,主要作用是过滤数据,然后插入数据中.
4 楼 xiwa 2008-05-20  
WEB工程吗? 我没见过服务器启动时会去调你写的main方法。。。 你也不可能自己去调吧? 有可能是做模块测试用的吧。
3 楼 kayoo 2008-05-19  
想当初 为了测试 我也干过这种事啊--在类里写main方法
2 楼 魔力猫咪 2008-05-19  
其实最主要的还是看他在Main里写了什么。一般情况下Java由一个指定的类的Main作为起点。不过网站程序中所有的程序由容器管理,main就不用写了。
如果你看到的这个程序是把Main作为一个初始化自身对象的话,应该是一个不好的写法。对象的生命周期最好根据需求由服务器容器或者IOC容器管理,至不济自己写个工厂类处理。靠每个类的Main方法处理,应该是个反模式。
1 楼 wanwok 2008-05-19  
怎么就没这个说话呢,是我说的大家都不懂?

相关推荐

Global site tag (gtag.js) - Google Analytics