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

解决方案 »

  1.   

    我这么做实在有苦衷,想不到其他办法,大家有空帮忙看看我之前发的帖子
    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;
    }
    -------------------------------
      

  2.   

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

  3.   

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

  4.   

    为了说明清楚,我把之前的帖子再贴一次,谢谢各位我是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
      

  5.   

    ---------我的源码-------------
    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];
      

  6.   

    可以不过你写得有点问题。变量声明重复了。
    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);
        }
    }
      

  7.   

    谢谢 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
      

  8.   

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

  9.   

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

  10.   

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

  11.   

    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);
         }
        }
    }