Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Java应用程序在Mac OS X上使用Ant执行其他Java应用程序_Macos_Ant_Classnotfoundexception_Uimanager - Fatal编程技术网

Macos Java应用程序在Mac OS X上使用Ant执行其他Java应用程序

Macos Java应用程序在Mac OS X上使用Ant执行其他Java应用程序,macos,ant,classnotfoundexception,uimanager,Macos,Ant,Classnotfoundexception,Uimanager,我正在开发一个客户机-服务器Java应用程序,该应用程序将在Mac OS X以及Windows和Linux上运行。该应用程序有几个不同的客户端模块,这些模块应该从启动器应用程序执行。 我看过ProcessBuilder类,但我似乎不适合自己。我在这里找到了一个att stackoverflow线程,其中建议使用Ant进行示例。 我实现了一个执行客户端模块的方法: public void launchAnt(ApplicationData applicationData) { Projec

我正在开发一个客户机-服务器Java应用程序,该应用程序将在Mac OS X以及Windows和Linux上运行。该应用程序有几个不同的客户端模块,这些模块应该从启动器应用程序执行。 我看过ProcessBuilder类,但我似乎不适合自己。我在这里找到了一个att stackoverflow线程,其中建议使用Ant进行示例。 我实现了一个执行客户端模块的方法:

public void launchAnt(ApplicationData applicationData) {
    Project project = new Project();
    project.setBaseDir(new File(System.getProperty("user.dir")));
    project.init();
    DefaultLogger logger = new DefaultLogger();
    project.addBuildListener(logger);
    logger.setOutputPrintStream(System.out);
    logger.setErrorPrintStream(System.err);
    logger.setMessageOutputLevel(Project.MSG_INFO);
    System.setOut(new PrintStream(new DemuxOutputStream(project, false)));
    System.setErr(new PrintStream(new DemuxOutputStream(project, true)));
    project.fireBuildStarted();

    System.out.println("ApplicationLauncher.launch(): Running");
    Throwable caught = null;
    try {
        /**
         * Create Java task
         */
        Java javaTask = new Java();
        javaTask.setTaskName("Run " + applicationData.getApplication().name());
        javaTask.setProject(project);
        javaTask.setFork(false);
        javaTask.setFailonerror(true);
        javaTask.setClassname(applicationData.getClassName());

        /**
         * Working directory
         */
        File workdir = new File(System.getProperty("user.dir"));
        if(workdir.exists()) {
            javaTask.setDir(workdir);
        } else {
            System.out.println("ApplicationLauncher.launch(): ERROR: Unable to set workdir, " + workdir.getAbsolutePath() + " does note exist.");
        }

        /**
         * Classpath
         */
        Path path = new Path(project);
        Collection<String> classpaths = getClasspath();
        for (String classpath : classpaths) {
            Path currPath = new Path(project, new File(classpath).getAbsolutePath());
            path.add(currPath);
        }
        System.out.println("ApplicationLauncher.launch(): Classpath: " + path.toString());
        javaTask.setClasspath(path);

        /**
         * Arguments
         */
        Argument arg = javaTask.createArg();
        arg.setValue(applicationData.getArguments());

        /**
         * Initiate and execute
         */
        javaTask.init();
        int ret = javaTask.executeJava();
        System.out.println("ApplicationLauncher.launch(): Java task return code: " + ret);
    } catch (BuildException e) {
        caught = e;
    }

    project.log("ApplicationLauncher.launch(): Finished");
    project.fireBuildFinished(caught);
}
这是堆栈跟踪:

java.lang.ClassNotFoundException: apple.laf.AquaLookAndFeel
    at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1361)
    at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1311)
    at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1070)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:242)
    at javax.swing.SwingUtilities.loadSystemClass(SwingUtilities.java:1788)
    at javax.swing.UIManager.setLookAndFeel(UIManager.java:484)
如果我尝试独立运行应用程序,它可以正常工作。launcher应用程序包含的行与失败的行完全相同,并且在launcher中工作正常。似乎ant启动应用程序的方式存在一些不正确的地方。 我已经比较了System.properties和类路径,当从启动程序和独立程序执行应用程序时,它们是有效的,没有区别

我就是不明白为什么找不到这个类。 还有其他人看到这个问题吗?任何建议都将不胜感激


塔克斯

这些是一些最难调试的错误。这是一个好迹象,代码在Ant之外运行正常,这留下了类路径问题。检查项目的类路径,系统找不到apple.laf.AquaLookAndFeel。

这些是最难调试的错误。这是一个好迹象,代码在Ant之外运行正常,这留下了类路径问题。检查项目的类路径,系统找不到apple.laf.AquaLookAndFeel

java.lang.ClassNotFoundException: apple.laf.AquaLookAndFeel
    at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1361)
    at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1311)
    at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1070)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:242)
    at javax.swing.SwingUtilities.loadSystemClass(SwingUtilities.java:1788)
    at javax.swing.UIManager.setLookAndFeel(UIManager.java:484)