我有问题。 我想在我的应用程序中添加秒表显示。我使用此page作为参考。 我下载并添加了必要的commons-scxml-0.9.jar库(带源代码)。 Eclipse中没有错误但是当我调试它时,在这个命令中调用超级类(AbstractStateMachine)的class构造函数:
超级(StopWatch.class.getClassLoader()的getResource( “组织/阿帕奇/公地/ SCXML / ENV / stopwatch.xml”));
但是超类构造函数没有获得任何属性。它需要最终URL scxmlDocument ,但只显示 null 。
我知道stopwatch.xml的外观,但我应该放在哪里,以及如何从中创建最终的URL scxmlDocument ?
我尝试了一切,但没有任何效果。
谢谢大家!!
这是stopwatch.xml,如果我添加它,因为 id 属性,eclipse报告错误:
`<?xml version="1.0" ?>
<transition event="watch.start" target="running" />
</state>
<state id="running">
<transition event="watch.split" target="paused" />
<transition event="watch.stop" target="stopped" />
</state>
<state id="paused">
<transition event="watch.unsplit" target="running" />
<transition event="watch.stop" target="stopped" />
</state>
<state id="stopped">
<transition event="watch.reset" target="reset" />
</state>
`
答案 0 :(得分:0)
您的代码看起来很好。如果您在运行时收到异常,则应该将其包含在您的问题中。 XML也看起来很好,除了你排除了前几行和最后一行(这是故意还是你的XML真的缺少这些行?)。这是我的XML:
<?xml version="1.0"?>
<!--
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
-->
<scxml xmlns="http://www.w3.org/2005/07/scxml"
version="1.0"
initial="reset">
<state id="reset">
<transition event="watch.start" target="running"/>
</state>
<state id="running">
<transition event="watch.split" target="paused"/>
<transition event="watch.stop" target="stopped"/>
</state>
<state id="paused">
<transition event="watch.unsplit" target="running"/>
<transition event="watch.stop" target="stopped"/>
</state>
<state id="stopped">
<transition event="watch.reset" target="reset"/>
</state>
</scxml>
至于放置XML文件的位置,通常将它放在SRC目录中。当Eclipse执行构建时,它将不知道如何处理XML文件,因此,它的默认行为是将其复制到编译代码所在的BIN目录。您可能需要执行Project > Clean...
才能实现此目的。这是运行时环境通常期望找到这样的资源的地方。
这是一个非常好的技巧:如果你在任何版本的Windows上进行开发,你可以去微软非常好的Sysinternals网站(http://technet.microsoft.com/en-US/sysinternals)。在这里,您可以找到精彩的Process Monitor实用程序。下载,安装并运行此免费实用程序。在实用程序中,创建一个进程监视器筛选器:Path | contains | stopwatch.xml
确保已启用此筛选器并禁用所有其他(预定义)筛选器。
然后运行已编译的秒表程序。该实用程序将显示应用程序的每个位置(以及其中包含的所有类加载器)查找stopwatch.xml
。
然后,您可以移动/复制/删除文件,以确保它位于应用程序查找文件的位置。此实用程序对于编写J2EE应用程序(例如Tomcat,Websphere等)时出现的类似“我找不到资源”的问题尤其方便。
最后,虽然您没有提及有关依赖jar文件的任何内容,但请确保它们位于类路径中:
commons-beanutils-1.9.2.jar
commons-digester-2.1.jar
commons-jexl-1.1.jar
commons-logging-1.2.jar
commons-scxml-0.9.jar
log4j-1.2.17.jar
xalan.jar