我正在使用Java开展团队项目。一个要求是我们动态填充实现特定接口的所有类的下拉菜单。编译后可以添加新类。为实现这一目标,我们正在使用反射。
问题:我的系统上的所有下拉菜单都是空白的。我不能为我的生活弄清楚为什么他们没有人口。所有其他5名团队成员都在使用它们的系统。
我厌倦了不起作用的事情:
1)安装最近的日食(伽利略),因为休息团队正在使用它
2)重新安装最新的java版本(jdk1.6.0-17和jre6)
3)检查PATH和JAVA_HOME变量
关于我还能尝试什么或者我做过什么的任何想法应该解决它而不是?这让我发疯了。
编辑: 我应该更清楚我们正在团队中发展。我们使用SVN进行版本控制,我们都运行完全相同的源代码。我甚至尝试从SVN查看整张树的新副本,但是当我的系统对队友有效时,我遇到了相同的问题。
团队创建了一个可执行的jar,除了我的以外,每个人的系统运行良好。除了反射位之外,一切都适合我。
答案 0 :(得分:6)
您需要调试您的应用程序。这意味着您必须系统地探索问题的可能原因。以下是我想到的一些事情:
您的GUI可能会失败而不是反思吗?如果您使用System.out.println()
而不是菜单输出该怎么办?
您的反射代码是否会抛出异常,您是否忽略它?
您的反射代码是否实际被调用?在那里投掷println()
以确保!
接口的测试是否遭受错误或类似错误导致其失败?尝试找到实现Serializable
的类!
您的反射测试是否在主线程中运行并尝试更新GUI?您需要使用SwingUtilities.invokeAndWait
来获取Swing工作线程的更新。
您正在使用Eclipse; Eclipse有一个很棒的调试器。在主要操作的位置附近设置断点,然后单步执行代码。
答案 1 :(得分:2)
PATH
和JAVA_HOME
无济于事。 PATH
仅影响动态链接库(“本机代码”)。 JAVA_HOME
是一个脚本变量,恰好被一些基于Java的实用程序(如Ant和Tomcat)使用;它对Java运行时本身没有任何意义。
您需要调查类路径,它应该由-classpath
命令的java
选项指定,位于Eclipse项目的Build Path
中属性,或者如果您使用Class-Path
选项启动java
,则在JAR文件主要部分的-jar
属性中。
在代码中,您应该能够通过检查系统属性"java.class.path"
System.out.println(System.getProperty("java.class.path"));
答案 2 :(得分:1)
问题解决方案:
导致源代码的类路径必须没有空格。
我正在运行Windows XP,无论出于何种原因,如果导致jar文件的类路径或使用反射的源代码中有任何空格,则反射失败。
我拿了一个适用于我团队其他成员的jar文件,并在我的系统上从C:\运行它,反射效果非常好。
我不知道为什么会这样,如果您知道发生了什么,请发表评论。
答案 3 :(得分:0)
可能是一个远景,但寻找你和你的队友的安全设置的差异。文章描述了更多细节http://www.ibm.com/developerworks/library/j-dyn0603/标题“安全和反思”