【问题标题】:How do I force my Java application to use Java JRE 1.6 instead of 1.7? [duplicate]如何强制我的 Java 应用程序使用 Java JRE 1.6 而不是 1.7? [复制]
【发布时间】:2012-09-20 22:41:42
【问题描述】:

可能重复:
How to check JRE version prior to launch?

许多人想知道如何强制他们的程序使用最低版本的 jre,但我希望我的程序只使用 java 6 而不是 java 7(也就是 jre 1.6 的最大值)运行。原因是我的程序需要使用 FTP,而 java 7 有可怕的 FTP 错误。

如果用户安装了 1.7,有没有办法让我的应用程序使用 1.6 轻松运行?

我看过的一些选项是:launch4j

除了可能将整个 jre 与我的程序捆绑在一起之外,我不太确定它是否能解决我的问题。我认为这不是最理想的解决方案。

有人可以帮助我指导我在理论上如何解决/处理这个问题吗?

【问题讨论】:

  • 正如this SO post 所指出的,可以通过对 Windows 7 防火墙配置进行特定更改来解决 FTP 错误(这实际上是导致有时归因于 Java 7 的错误的原因)。与强制使用较旧的 java 版本相比,这不是更简单的解决方案吗?
  • @Dmitri:我不想让我的用户更改他们的 Windows 7 防火墙配置。我尝试在我的应用程序中使用此代码,这是一个建议的解决方法: System.setProperty("java.net.preferIPv4Stack" , "true");但是,它似乎不可靠,在某些情况下它可以工作,而在其他情况下则根本不可靠。我想要一些能让我放心的东西,它会起作用,而不是一半。
  • 对于用户来说,调整防火墙比安装以前版本的 Java 更容易。你看:如果他们遇到 FTP 的问题,这不是 100% 的麻烦。但是无法运行您的应用程序(提示需要旧版本的 Java)对用户来说是一种非常糟糕的体验。他们可能会决定在此之后根本不运行您的应用程序。
  • @EugeneMayevski'EldoSCorp:我同意你在这里所说的,调整防火墙可能是两害相权取其轻,但我想我更喜欢对用户有良好体验的东西在周围。但我认为我最初的问题得到了回答,从某种意义上说,试图强迫他们使用 1.6 并不是解决问题的方法。

标签: ftp java


【解决方案1】:

按照somewhat related question/answer 中的建议,使用System.getProperty("java.version") 查看运行应用程序所使用的 Java 版本。有了这个,您可以让应用程序提示用户他应该使用较旧的 JRE。

至于在没有基于路径的 JRE 检测的情况下运行应用程序,主要问题是您无法确定在用户系统的哪个位置安装了正确的 JRE。在 Windows 上有两种默认的可能性,在 *nix 上它可能在任何地方。

如果我是你,我会尝试找到一个自定义 FTP 库来解决你提到的错误,以获得新版本 Java 的最大安全性和优化优势,而不是强迫用户停留在过去。

【讨论】:

  • 这个问题涵盖了FTP客户端库的主题-stackoverflow.com/questions/295178/…
  • 我知道你来自哪里,你的回答证实了我的怀疑。最好让我的代码同时适用于 1.6 和 1.7,因此我最终不必担心大多数情况下他们使用的是什么 jre。令人烦恼的是,目前确实没有针对 java 7 ftp 问题的可靠解决方法。 (我指的错误在这里讨论:Java 7 FTP Bug)我想我会开始研究其他可能的协议并重写我的应用程序的那部分。
  • @Meeks - 你不需要其他协议。您只需要客户端的不同实现。
  • Stephen C:使用不同的 FTP 客户端库如何绕过该错误?据我所知,它没有,因为问题在于 windows、IPv6、ftp 和 java 7 的交互。不同的库不会改变这些东西的基本功能。
  • 明确地说,我目前正在使用:org.apache.commons.net.ftp.FTP
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多