Java应用程序在IDE';s目录

Java应用程序在IDE';s目录,java,swing,build,Java,Swing,Build,当我用NetBeans运行它时,一切正常。当我复制dist目录内容并运行.jar时,有些东西会出错。最重要的是,JTable编辑会变得混乱,一些字段只有在按下ESC键时才会失去焦点(如果之前确实按下ENTER键,则会接受更改,否则不会接受,但在这两种情况下都需要ESC键)以及类似的奇怪内容。我有种感觉我错过了一些明显的东西 如果有必要的话,p.S.文件会在保存时自动编译(NetBeans功能) 编辑:当我转到dist dir并运行.jar时,它也可以工作。当我从NetBeans项目目录中复制di

当我用NetBeans运行它时,一切正常。当我复制dist目录内容并运行.jar时,有些东西会出错。最重要的是,JTable编辑会变得混乱,一些字段只有在按下ESC键时才会失去焦点(如果之前确实按下ENTER键,则会接受更改,否则不会接受,但在这两种情况下都需要ESC键)以及类似的奇怪内容。我有种感觉我错过了一些明显的东西

如果有必要的话,p.S.文件会在保存时自动编译(NetBeans功能)

编辑:当我转到dist dir并运行.jar时,它也可以工作。当我从NetBeans项目目录中复制dist dir时,问题就开始了。。。可能是某些依赖关系被破坏了还是什么

编辑2(回复):

这个问题发生在我的电脑(Ubuntu9.04)、我的WindowsXP虚拟机内部以及另一台装有WindowsXP的(真实)电脑上。当我使用java/path/to/main.jar从控制台运行它时,它抛出mainclassnotfoundexception并根本不启动。当我使用java-jar/path/to/main.jar运行它时,它可以正常工作,但是当遇到上述情况时,它抛出java.lang.NumberFormatException:null

我使用NumberFormat(在表更新中)的唯一位置是:

而且,可能是:

currencyFormatter = NumberFormat.getCurrencyInstance( Locale.getDefault() );
其中默认语言环境设置为

Locale.setDefault(new Locale("lt", "LT"));

Java版本是1.6.0_18,NetBeans和上述机器中的JVM都使用JDK。。。JAR是以ZIP格式存储的,因此您可以尝试将编译的JAR与Netbean的JAR进行比较(如果您能找到的话),以查看到底有什么不同。

不同的JRE版本?这是我的猜测,看看你的症状

有不同的方法可以做到这一点,但是您可以使用jconsole(jdk_dir/bin/jconsole.exe)获得这两个进程的完整细节(一个由NetBeans启动,另一个不启动)。这将为您提供JRE、加载的JAR等,然后您可以进行比较


HTH…

您是否尝试过一些普通的方法,比如创建一个干净的构建,以确保所有新的更改和资源都复制到dist库?

在NetBeans中,转到项目的属性(文件>项目属性)。转到选项卡。单击管理平台,查看平台文件夹的值

从控制台运行
\java-version

现在在没有完整路径的情况下重试;只需
java-version

我希望这些都返回不同的值

IDE使用的路径来自平台定义,默认情况下,该定义是在安装NB时创建的,从不更新。控制台中使用的路径来自windows path环境变量。这会在安装Java时更新,并且随着时间的推移,会偏离IDE使用的路径

一个好的经验法则是,当Java提示更新可用时,是时候在NetBeans中添加一个新的Java平台了

我通常在附近放几个月台。至少:
最新版本的1.4.2、1.5.0、1.6.0和旧版本的1.6.0(目前是u4,我们在第一个产品版本中推荐的版本)。

如果从控制台执行,请复制并粘贴堆栈错误。另外,问题是发生在您的计算机上还是发生在另一台计算机上?可能是路径、版本或其他出错的地方,这就是过度依赖IDE的问题。它是同一个jar。NetBeans会自动构建它,所以我只需复制/粘贴整个dist dir,并在其中包含jar,我就开始出现bug。当我直接从projects文件夹中启动它时,它就工作了。我的猜测是,有一些库没有在@runtime中编译,但使用了@runtime,但我不知道如何检查它。如果是这样的话,就会引发java.lang.NoClassDefFoundError。我认为您的环境中可能安装了两个JRE,而NetBeans和shell执行并没有使用同一个JRE。您可以参考etc/netbeans.conf(属性'netbeans\u jdkhome')来查看netbeans中使用了哪些JRE/JDK,并将其与shell环境进行比较。
Locale.setDefault(new Locale("lt", "LT"));