Tag: java 6

如何在Java 6中使用为Java 7编译的库?

我正在开发一个Java应用程序,我需要使用一个名为myBeans.jar的jar。 这个myBeans.jar包含许多使用jdk 1.7编译的类文件。 我没有这些类文件的源代码。 我的整个应用程序使用的是jdk 1.6 。 我无法将其编译器更改为jdk 1.7 。 所以我希望我的jar与我的应用程序兼容。 这就是为什么我希望用jdk 1.6编译jar的类。 现在我的问题是: 有没有办法使用jdk 1.6编译类文件(而不是java文件)? 我们也欢迎任何其他建议。 有人建议我使用反编译器从类文件中获取源代码,然后使用jdk 1.6编译源代码。 但是我最后会喜欢这个解决方案,因为有很多类文件。

从JAR文件加载属性(java 1.6)

我手动在jar中注入一个属性文件。 如何在java 1.7之前从jar文件加载属性? 我尝试了很多变通办法,到目前为止还没有任何工作。 关于它的问题很多,但是所有内容都集中在java 1.7的ClassLoader方法上。

在AtomicInteger类中实现addAndGet

我正在浏览AtomicInteger类中的addAndGet方法的Java(Java 6)源代码。 相应的代码如下: public final int addAndGet(int delta) { for (;;) { int current = get(); int next = current + delta; if (compareAndSet(current, next)) return next; } } compareAndSet方法调用本机方法来执行赋值。 主要有两个问题: 无限循环如何帮助? 可能是什么情况,“if(compareAndSet(current,next))”条件可能返回false? 在这种情况下,代码可能会遇到无限循环。 如果保证compareAndSet将始终返回“true”,那么我们是否可以完全取消此检查? 类似的疑问是使用decrementAndGet , getAndDecrement , getAndAdd方法。

为什么这个代码在Java 1.6中编译而在Java 1.7中编译?

以下代码在Java 1.6中编译良好,但无法在Java 1.7中编译。 为什么? 代码的相关部分是对私有“数据”字段的引用。 引用来自定义字段的同一类,因此看似合法。 但它是通过一般类型的变量发生的。 这段代码 – 一个基于内部库中的类的简化示例 – 在Java 1.6中工作,但现在不在Java 1.7中。 我不是在问这个如何解决这个问题。 我已经做到了。 我试图找到解释为什么这不再起作用的原因。 想到三种可能性: 根据JLS,此代码不是法律的,应该永远不会编译(1.6编译器中存在错误,在1.7中已修复) 根据JLS,此代码是LEGAL并且应该编译(1.7编译器中引入了向后兼容性错误) 此代码属于JLS中的灰色区域 Foo.java: import java.util.TreeMap; import java.util.Map; public abstract class Foo<V extends Foo> { private final Map data = new TreeMap(); protected Foo() { ; } // Subclasses should implement this as ‘return this;’ public abstract […]

什么时候Java 6生命终结? (在编写开发人员工具的上下文中)

背景 这并不像你想象的那样立即明白。 首先, 截至2013年2月 , 甲骨文已经停止了对Java 6的公众支持,但是2013年12月的Premier支持和2016年12月的扩展支持还有一个长尾。 最重要的是,持续支持可以永远持续下去。 下一个主要的Java供应商IBM 似乎甚至没有发布对Java 6的支持 (并且在2013年9月之前仍然支持Java 5!) 第三,我们有Apple:2013年6月目前最新的补丁和“该公司没有详细说明其黑白支持政策”似乎是任何人的猜测…但如果他们处理Java 5可以是作为基础我们可能会看到另外18个月左右… 2014年底 – 是吗? 最后我们有OpenJDK …… Red Hat已经表示他们现在将支持 …… 我甚至没有开始考虑其他JVM实现只是在野外看到的更常见的! 所以从我所看到的,到目前为止,只要你有钱支付Oracle / IBM / Red Hat,你就可以继续获得无限期支持的Java 6版本…… 也许我们可以开始更好地构建这个问题,并获得一个非无限期答案的机会: 如果你不能再购买特定JVM运行的硬件/操作系统,那么继续支持那个特定的JVM有点没什么意义。 扩展的支持合同适用于现有客户,他们现有的系统很可能满足他们现有的需求……如果他们不能更换为更新的 这实际上为我们提供了一些关于Apple的背景……由于Apple硬件支持5年(​​如果在加利福尼亚州为7),那么唯一受支持的Apple硬件应该是基于x86的硬件,因为交换机已于2006年12月完成(是最后一个基于PPC的硬件) 苹果硬件出货) ,所以实际上我们不必担心在PPC上运行的Apple Java版本 同样,我们可以排除在旧版Windows上运行的任何Java版本。 这意味着,如果Java安装程序无法在Windows 7+上运行,那么到2014年4月那么我们是否可以有效地忽略Windows XP支持的Java版本? 我真正感兴趣的是开发人员工具何时可以推进其最低Java版本。 一段时间以来, Jenkins一直保持对Java 5的支持,但更新的更新意味着1.520+需要Java 6或更高版本的主服务器和从服务器。 如果某些构建从属(例如传统硬件)无法运行较新的JVM,则会导致问题。 Maven已经有很长的历史让你将JVM分解为J2SE 1.3以运行unit testing,但是从Surefire 2.15开始 ,它只支持运行unit testing,与Java 5一样低。 […]

如何让内部类inheritance封闭类的generics类型?

我正在使用Java 6。 我无法让我的内部类使用与其封闭类相同的generics类。 目前我有 public class TernarySearchTree { … protected class TSTNode { // index values for accessing relatives array protected static final int PARENT = 0, LOKID = 1, EQKID = 2, HIKID = 3; protected char splitchar; protected TSTNode [] relatives; private T data; protected TSTNode(char splitchar, TSTNode parent) { this.splitchar = splitchar; […]

如何禁止创建hs_err_pid文件?

我们在java 1.6.0_13下运行java应用程序。 当它崩溃时,它会创建正常的hs_err_pid文件。 即使应用程序崩溃,我也不希望创建此文件。 java命令行有没有办法抑制这个? 我熟悉-XX:ErrorFile选项。 如果我将此设置为空字符串会抑制它吗?

是否可以使用JDK 1.6构建java代码以在JRE 1.5上运行?

在使用JDK 1.6编译时,是否可以选择构建在JRE 1.5上运行的Java代码? PS:我是Java新手。

是否可以使用可在Java 6 JVM上运行的Java 7 SDK编译类文件?

由于公共Java 6 SE JRE越来越接近它的EOL(11月12日),我正在考虑将我的项目从Java 6移植到Java 7.如果Apple提供Java 7 JRE,这将不是什么大问题。对于Mac OS X.但由于Apple不愿意这样做,我仍然需要支持只拥有Java 6 JRE的用户。 有没有办法用Java 7 javac编译Java 6兼容的二进制文件(类文件)? 当然,我知道在这样做时我不能使用新的Java 7function。 谢谢你的期待!

JDK 1.7打破向后兼容性? (generics)

我发现了类似的主题,但过于复杂,并不完全相同。 事情就是这样。 这是(最小)代码,它在1.6上很好,但不能用1.7 javac编译。 public class Test { private static class A{}; private static class B{}; private static class C{}; B doSomething(A arg){ return new B(); } C doSomething(A arg){ return new C(); } } 在1.7上错误是这样的: java: name clash: doSomething(Test.A) and doSomething(Test.A) have the same erasure 我理解类型擦除以及为什么它是错误的代码。 我只是不明白为什么我们可以在我们的项目中编译和运行1.6中的代码,当1.7有问题时。 怎么了? 这是1.6编译器中的一个错误,它允许我们这样做吗? 是否有可能使其在重写以外的1.7中工作? JDK1.6 javac版本:1.6.0_43 JDK1.7 javac版本:1.7.0_25