CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

请教有关main method的问题

楼主xhyjiang()2005-02-02 13:34:09 在 Java / J2SE / 基础类 提问

请问我可否在自己编的java程序中调用其他class中的main函数,比如:  
   
  public   class   Emulator{     //example   which   has   a   main   method  
  public   static   void   main(String   args[]){  
                  if(!checkVMVersion())  
                          System.exit(1);  
                  sw   =   new   SplashWindow(null);  
                  (new   Main()).run(args);  
  }  
  ....  
  }  
   
  ---------------------  
  import   Emulator;  
  public   class   myprogram{   //my   program   which   wants   to   invoke   Emulator.main  
  String   s   =   "-Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin";  
  Emulator.main(s);   //?????    
  ...  
  }  
   
  谢谢各位建议  
   
  Yu 问题点数:0、回复次数:15Top

1 楼lhj(努力加油)回复于 2005-02-02 13:40:33 得分 0

String   s   =   "-Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin";  
  String[]   args   =   new   String[1];  
  args[0]   =   s;  
  Emulator.main(args);   //这样可以Top

2 楼drugon(更高,更远,更强)回复于 2005-02-02 13:43:46 得分 0

不行吧!Top

3 楼zjpangxie(专用马甲)回复于 2005-02-02 13:48:42 得分 0

可以,但不知道你为什么这么做     -_-Top

4 楼xhyjiang()回复于 2005-02-02 14:00:51 得分 0

我这么做实在有苦衷,想不到其他办法,大家有空帮忙看看我之前发的帖子  
  http://community.csdn.net/Expert/topic/3769/3769180.xml?temp=.6164057  
   
  这个帖子的Emulator   class就是上述帖子里的com.sun.kvem.toolbar.Main   class,下面是我反编译Main.class后部分代码:  
  ------------------------------------  
  package   com.sun.kvem.toolbar;  
   
  import   com.sun.kvem.environment.JavaVersionTester;  
  import   com.sun.kvem.util.ToolkitResources;  
  import   com.sun.kvem.util.WindowUtils;  
  import   java.io.PrintStream;  
  import   java.util.Properties;  
  import   java.util.Vector;  
  import   javax.swing.JOptionPane;  
   
  public   class   Main  
  {  
          /*   member   class   not   found   */  
          class   SplashWindow   {}  
   
          public   Main()  
          {  
          }  
   
          public   int   run(String   as[])  
          {  
                  as   =   processArgs(as,   0);  
                  WindowUtils.setLookAndFeel();  
                  MainWindow   mainwindow   =   new   MainWindow();  
                  mainwindow.run();  
                  sw.setVisible(false);  
                  sw.dispose();  
                  return   0;  
          }  
   
          public   static   boolean   checkVMVersion()  
          {   ...  
          }  
   
          public   static   void   main(String   args[])  
          {  
                  if(!checkVMVersion())  
                          System.exit(1);  
                  sw   =   new   SplashWindow(null);  
                  (new   Main()).run(args);  
          }  
   
          private   static   String[]   processArgs(String   as[],   int   i)  
          {  
                  Vector   vector   =   new   Vector();  
                  for(int   j   =   i;   j   <   as.length;   j++)  
                  {  
                          String   s   =   as[j];  
                          if(s.startsWith("-D")   &&   s.indexOf("=")   !=   -1)  
                          {  
                                  String   s1   =   s.substring(2);  
                                  int   k   =   s1.indexOf("=");  
                                  String   s2   =   s1.substring(0,   k);  
                                  String   s3   =   s1.substring(k   +   1);  
                                  System.getProperties().put(s2,   s3);  
                          }   else  
                          {  
                                  vector.add(s);  
                          }  
                  }  
   
                  String   as1[]   =   new   String[vector.size()];  
                  vector.copyInto(as1);  
                  return   as1;  
          }  
   
          private   static   SplashWindow   sw;  
  }  
  -------------------------------  
   
  Top

5 楼dyhml(VirusCamp)回复于 2005-02-02 14:07:47 得分 0

参数不对,那是给jvm的参数,不是给main的,main不会认.  
   
  java   -Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22\bin   Emulator   arg1   arg2   arg3  
   
  只有Emulator之后的参数才是main的参数.Top

6 楼xhyjiang()回复于 2005-02-02 14:17:43 得分 0

啊???这么说-Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22\bin   参数不可能从程序里传递了?Top

7 楼xhyjiang()回复于 2005-02-02 14:21:39 得分 0

为了说明清楚,我把之前的帖子再贴一次,谢谢各位  
   
  我是J2ME的新手,现在学校从事软件测试的研究,想用一种测试工具(TTCN-3)测试MIDlet程序,测试工具需要被测程序(MIDlet)能够运行在其测试环境中,但我想MIDlet程序不能独立在emulator之外运行(需要KVM支持),所以我想是否可以自己写程序调用Emulator运行,然后再装载MIDlet程序进行测试。目前Nokia、Motorola和Sun等公司提供的emulator都是用Java写的,都提供了很多.jar库文件,可否通过打开库文件,搞清楚   “启动emulator”时调用的库文件的规律,对其二次编程,将emulator嵌入自己的程序中调用。  
   
  比如说:运行SUN的WTK22/bin中ktoolbar.bat可以启动J2ME   Wireless   Toolkits   2.2.   ktoolbar.bat内容如下:  
   
  C:\J2SDK1~1.2_0\bin\java.exe   -Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin   -Dsun.java2d.ddlock=true   -Dsun.java2d.gdiblit=false   -cp   C:\WTK22/wtklib/kenv.zip;C:\WTK22/wtklib/ktools.zip;C:\WTK22/bin/JadTool.jar;C:\WTK22/bin/MEKeyTool.jar;C:\WTK22/wtklib/customjmf.jar;C:\WTK22/lib/j2me-ws.jar;C:\WTK22/bin/schema2beansdev.jar;C:\WTK22/bin/j2me_sg_ri.jar;C:\WTK22/bin/jaxrpc-impl.jar;C:\WTK22/bin/jaxrpc-api.jar;C:\WTK22/bin/jaxrpc-spi.jar;C:\WTK22/bin/activation.jar;C:\WTK22/bin/mail.jar;C:\WTK22/bin/saaj-api.jar;C:\WTK22/bin/saaj-impl.jar;C:\WTK22/bin/xsdlib.jar   com.sun.kvem.toolbar.Main  
   
  将com.sun.kvem.toolbar.Main.class   引用到另一个java程序中,再将所有上述jar库文件import到程序中,这样是否可以将emulator运行起来?  
   
  另外,-Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin   -Dsun.java2d.ddlock=true   -Dsun.java2d.gdiblit=false   可否简单地看作是com.sun.kvem.toolbar.Main.class   的main的输入参数?  
   
  请问各位,上述方法从技术角度上讲,难度和可行性有多大?谢谢各位的建议  
  注:我并非想盗版其他公司的emulator的版权,只是想构建个测试J2ME的测试平台,用于学术研究。  
   
  XHYJ  
  Top

8 楼xhyjiang()回复于 2005-02-02 14:28:16 得分 0

---------我的源码-------------  
  import   com.sun.kvem.toolbar.Main;  
   
  class   emulator   {  
          public   static   void   main(String[]   args)   {  
  String   s   =   "-Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin";  
  String[]   args   =   new   String[1];  
  args[0]   =   s;  
  Main.main(args);  
          }  
  }  
  --------------------编译出错信息--------------------  
  C:\myprj\test3\emulator.java:5:   illegal   escape   character  
  String   s   =   "-Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin";  
                                                                                        ^  
  C:\myprj\test3\emulator.java:5:   illegal   escape   character  
  String   s   =   "-Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin";  
                                                                                                                                                  ^  
   
  ---------修改后源码-----------  
  import   com.sun.kvem.toolbar.Main;  
   
  class   emulator   {  
          public   static   void   main(String[]   args)   {  
  String   s   =   "-Dkvem.home";  
  String[]   args   =   new   String[1];  
  args[0]   =   s;  
  Main.main(args);  
          }  
  }  
  ---------编译出错信息----------  
  C:\myprj\test3\emulator.java:6:   args   is   already   defined   in   main(java.lang.String[])  
  String[]   args   =   new   String[1];  
  Top

9 楼mu_x(阿木)回复于 2005-02-02 15:37:34 得分 0

可以不过你写得有点问题。变量声明重复了。  
  import   com.sun.kvem.toolbar.Main;  
   
  class   emulator   {  
          public   static   void   main(String[]   args)   {  
  String   s   =   "-Dkvem.home";  
  String[]   as   =   new   String[1];  
  as[0]   =   s;  
  Main.main(as);  
          }  
  }  
  Top

10 楼xhyjiang()回复于 2005-02-02 17:53:20 得分 0

谢谢   mu_x(阿木)   ,好像可以编译通过了,但是当我将string换回原来的"-Dkvem.home=C:\WTK22",就出现如下编译错误:  
   
  ---------我的源码-------------  
  import   com.sun.kvem.toolbar.Main;  
  class   emulator   {  
          public   static   void   main(String[]   args)   {  
  String   s   =   "-Dkvem.home=C:\WTK22";  
  String[]   ar   =   new   String[1];  
  ar[0]   =   s;  
  Main.main(ar);  
          }  
  }  
  ---------编译出错信息----------  
  C:\myprj\test3\emulator.java:5:   illegal   escape   character  
  String   s   =   "-Dkvem.home=C:\WTK22";  
                                                                                        ^  
  1   error  
  Top

11 楼xhyjiang()回复于 2005-02-02 17:58:25 得分 0

好像java不认识   \  
  各位有否类似经历?Top

12 楼mu_x(阿木)回复于 2005-02-02 18:24:13 得分 0

\是转意符,想输入\用\\。  
  String   s   =   "-Dkvem.home=C:\\WTK22";Top

13 楼mu_x(阿木)回复于 2005-02-02 18:26:11 得分 0

建议先学习一下java基础,你这个程序有很多毛病。Top

14 楼xhyjiang()回复于 2005-02-02 18:52:04 得分 0

illegal   escape   character   编译错误已解决,谢谢!但还是出现   You   must   define   the   system   property   "kvem.home"   错误。  
  我确信已经将-Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin   -Dsun.java2d.ddlock=true   -Dsun.java2d.gdiblit=false   传递给了com.sun.kvem.toolbar.Main   的main函数,而且import了所有的jar文件。请问各位:用java命令行执行中   -Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin   -Dsun.java2d.ddlock=true   -Dsun.java2d.gdiblit=false   这些参数是传递给JVM的,还是传递给com.sun.kvem.toolbar.Main的main   method的?  
   
  C:\J2SDK1~1.2_0\bin\java.exe   -Dkvem.home=C:\WTK22   -Djava.library.path=C:\WTK22/bin   -Dsun.java2d.ddlock=true   -Dsun.java2d.gdiblit=false   -cp   C:\WTK22/wtklib/kenv.zip;C:\WTK22/wtklib/ktools.zip   com.sun.kvem.toolbar.Main    
   
  ----------我的源码-----------  
  import   com.sun.kvem.toolbar.Main;  
  import   java.io.*;  
   
  class   emulator   {  
          public   static   void   main(String[]   args)   {  
            String   thisLine;  
            try   {  
                BufferedReader   in   =   new   BufferedReader(new   FileReader("property.txt"));  
                while   ((thisLine   =   in.readLine())   !=   null)   {    
                    System.out.println(thisLine);  
    String[]   ar   =   new   String[1];  
    ar[0]   =   thisLine;  
    Main.main(ar);  
                }    
            }    
            catch   (IOException   e)   {    
                System.err.println("Error:   "   +   e);  
            }  
          }  
  }  
   
  Top

15 楼mu_x(阿木)回复于 2005-02-02 19:06:05 得分 0

这个好像是环境变量之类的东东,不太清楚。Top

相关问题

  • 谁知道socks中有关METHOD == USERNAME/PASSWORD的协议?
  • 有关SOFTICE
  • 有关softice
  • 有关ASP....
  • 有关ASP.......
  • 有关asp......
  • 有关InstallShield for delphi
  • 有关报表
  • 与openrecordset有关
  • 有关窗体。。。

关键词

  • wtk
  • wtk22
  • emulator
  • 帖子
  • main
  • args

得分解答快速导航

  • 帖主:xhyjiang

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo