Java反射不适用于我的系统-适用于团队成员

Java反射不适用于我的系统-适用于团队成员,java,reflection,Java,Reflection,我正在用Java进行一个团队项目。一个要求是,我们动态地填充实现特定接口的所有类的下拉菜单。编译后可以添加新类。为了实现这一点,我们使用反射 问题:我的系统上的所有下拉菜单都是空白的。我一辈子都搞不懂为什么他们没有人来。所有其他5名团队成员都在他们的系统上工作 我累了但不起作用的事情: 1) 安装最新的eclipse(galileo),因为rest团队正在使用它 2) 重新安装最新的java版本(jdk1.6.0-17和jre6) 3) 检查路径和JAVA_主变量 有没有想过我还能做些什么,或者

我正在用Java进行一个团队项目。一个要求是,我们动态地填充实现特定接口的所有类的下拉菜单。编译后可以添加新类。为了实现这一点,我们使用反射

问题:我的系统上的所有下拉菜单都是空白的。我一辈子都搞不懂为什么他们没有人来。所有其他5名团队成员都在他们的系统上工作

我累了但不起作用的事情:

1) 安装最新的eclipse(galileo),因为rest团队正在使用它
2) 重新安装最新的java版本(jdk1.6.0-17和jre6)
3) 检查路径和JAVA_主变量

有没有想过我还能做些什么,或者我做了什么应该解决它而没有解决?它快把我逼疯了

编辑: 我应该更清楚,我们是在一个团队中发展的。我们使用SVN进行版本控制,我们都运行完全相同的源代码。我甚至试着从SVN查看整个树的一个新副本,但是当我的系统为队友工作时,我也遇到了同样的问题


团队创建了一个可执行的jar,它可以在每个人的系统上正常运行,除了我的系统。除了反射位之外,其他一切都对我有效。

您需要调试应用程序。这意味着您必须系统地探索问题的可能原因。以下是我想到的一些事情:

  • 您的GUI会失败而不是反射吗?如果使用
    System.out.println()
    而不是菜单输出,会怎么样

  • 您的反射代码是否抛出异常,您是否忽略它

  • 您的反射代码实际上被调用了吗?把一个
    println()
    扔进去

  • 该接口的测试是否存在导致其失败的打字错误或类似错误?尝试查找实现可序列化的类

  • 您的反射测试是否在主线程中运行并尝试更新GUI?您需要使用
    SwingUtilities.invokeAndWait
    来更新Swing工作线程

  • 您正在使用Eclipse;Eclipse有一个很棒的调试器。在主操作所在位置附近设置断点,然后单步执行代码


路径
JAVA\u主页
都没有帮助<代码>路径仅影响动态链接的库(“本机代码”)
JAVA_HOME
是一个脚本变量,一些基于JAVA的实用程序(如Ant和Tomcat)碰巧使用它;它对Java运行时本身没有任何意义

您需要研究类路径,它应该由Eclipse项目属性中的
构建路径
java
命令的
-classpath
选项指定,或者,如果您使用
-JAR
选项启动
java
,则在JAR文件主要部分的
类路径
属性中

在代码中,您应该能够通过检查系统属性“java.class.path”


这可能不太可能,但请查找您和您的队友在安全设置方面的差异。文章介绍了标题为“安全性和反射”的更多详细信息。

问题解决方案:

指向源代码的类路径中不能有空格

我运行的是windows XP,无论出于何种原因,如果指向使用反射的jar文件或源代码的类路径中有空格,则反射失败

我获取了适用于团队其他成员的jar文件,并在我的系统上从C:\运行它,反射工作得非常好


我不知道为什么会这样,如果您知道发生了什么,请发表评论。

您可以查看任何日志文件吗?您是否尝试过在调试模式下运行代码?与您的团队成员一起检查他们有什么特别的东西不是更好的主意吗?您的代码不工作,或者他们的代码在您的环境中也不工作?是的,听起来有点奇怪。如果这真的是一个团队的努力,那么他们正在合作,如果只有一个成员有一个有效的解决方案,他们就成功地完成了;如果他们在没有合作的情况下竞争,那就不是“团队”的事情。很抱歉造成混乱。我应该更清楚,我们是在一个团队中发展的。我们使用SVN进行版本控制,我们都运行完全相同的源代码。我甚至试着从SVN查看整棵树的新副本,但当我的系统为队友工作时,我的系统也出现了同样的问题。假设你的机器设置与其他系统没有明显不同,对吗?比如,操作系统的差异或者其他什么。我同意其他评论:我们可能必须看到代码在进行搜索。你说的是正确的,但是如果程序使用错误的Java运行会有什么区别?在不太可能的情况下,他正在一个古老的JVM上运行,他的反射代码已经无法通过编译器的语法检查,他肯定会注意到这一点!我没有说任何关于Java版本的事情。事实上,我是说他不应该再担心自己运行的是哪个版本的Java,而应该只关注类路径。比如,确保应该动态填充菜单的类实际上在类路径上。你说得对!感谢您的澄清,这是一个很好的建议。另一件需要尝试的事情是:验证应该找到的类之一是否可以直接加载。在代码中直接引用它,或者如果它在编译时通常不可用,则执行Class.forName()查找。如果不能,您就知道这是一个类加载器/类路径问题。如果可以,那么你就知道这是过滤中的东西。明智地记录或打印发现的任何内容。我可以在不需要时直接实例化这些类
System.out.println(System.getProperty("java.class.path"));