Java 7阻止Windows Vista和7上的FTP传输.
在FTP中,在传输文件之前,必须发送PORT或PASV命令.一旦发送其中一个命令,Windows防火墙就会关闭发送它的套接字.只有在防火墙打开且java.exe的例外不存在时才会发生这种情况.我怀疑这个问题与使用新的Vista IP堆栈的Java 7有关.
有没有人有任何想法如何解决或解决这个问题?我们正在分发一个Java FTP库,所以我们显然不能自己添加异常.
例外:
java.net.SocketException: Permission denied: recv failed
Run Code Online (Sandbox Code Playgroud)
JRE版本信息:
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
Run Code Online (Sandbox Code Playgroud)
后续行动1(2011年11月14日): Oracle已经分析了这个问题并发现它似乎是Windows防火墙和/或IPv6堆栈中的一个错误.他们设法使用本机C(即非Java)应用程序复制问题,因此这是该错误不在Java中的有力证据.他们告诉了微软,所以球现在在球场上.有关详细信息,请访问http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696
后续行动2(2012年7月27日): 甲骨文的一位(非常有帮助的)联系人告诉我,这个问题现在已经在微软升级了.我们希望尽快看到一些结果.
后续行动3(2012年8月15日): 我们在Oracle的联系人告诉我们,微软已接受该错误并正在确定其优先级.
后续行动4(2012年9月21日): 微软已经制作了一个目前正在由甲骨文测试的补丁.在发布日期没有任何消息.
后续行动5(2012年10月11日): 终于成功了!微软已公开发布了一个修补程序.他们暗示该修复程序将在未来包含在一般软件更新中:
"如果您没有受到此问题的严重影响,我们建议您等待包含此修补程序的下一个软件更新."
在研究使用和将整数原语转换为字符串的一些小辩论时"" + n,Integer.toString(int)我编写了这个JMH微基准测试:
@Fork(1)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Benchmark)
public class IntStr {
protected int counter;
@GenerateMicroBenchmark
public String integerToString() {
return Integer.toString(this.counter++);
}
@GenerateMicroBenchmark
public String stringBuilder0() {
return new StringBuilder().append(this.counter++).toString();
}
@GenerateMicroBenchmark
public String stringBuilder1() {
return new StringBuilder().append("").append(this.counter++).toString();
}
@GenerateMicroBenchmark
public String stringBuilder2() {
return new StringBuilder().append("").append(Integer.toString(this.counter++)).toString();
}
@GenerateMicroBenchmark
public String stringFormat() {
return String.format("%d", this.counter++);
}
@Setup(Level.Iteration)
public void prepareIteration() {
this.counter = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我使用默认的JMH选项运行它,我的Linux机器上都存在两个Java VM(最新的Mageia 4 64位,Intel i7-3770 CPU,32GB …
我是android世界的新角色,拥有.NET背景.我正在尝试安装Android Studio,但我在Android.com上与开发Android应用程序所需的JDK版本不匹配.
在SDK网页上,它指出需要JDK 6(在系统要求部分下).吉姆威尔逊也坚持他的Pluralsight课程(这是从去年五月开始的新课程),使用版本7和Android SDK将会产生很多麻烦,并且明确只使用JDK 6.
虽然在Android工作室页面(在安装步骤2下),他们解释了如何设置指示正确JDK位置的环境变量.在这里,他们使用JDK 7的路径
选择
Start menu > Computer > System Properties > Advanced System Properties.然后打开Advanced tab > Environment Variables并添加一个JAVA_HOME指向JDK文件夹的新系统变量C:\Program Files\Java\jdk1.7.0_21.
我很确定ADT和Eclipse软件包以及Android Studio软件包都使用相同的SDK,但现在我对我需要安装哪个JDK版本感到困惑.我唯一的目的是在迈出Android开发的第一步时尽可能避免出现问题.
免责声明:我对Pluralsight没有任何意义.我只是跟随课程的普通用户.
我看到很多关于这个的问题,并试图解决这个问题,但经过一个小时的谷歌搜索和大量的试验和错误,我仍然无法解决它.我希望你们中的一些人能够解决问题.
这就是我得到的:
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:835)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:453)
at java.util.ComparableTimSort.mergeForceCollapse(ComparableTimSort.java:392)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:191)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at java.util.Collections.sort(Collections.java:155)
...
Run Code Online (Sandbox Code Playgroud)
这是我的比较器:
@Override
public int compareTo(Object o) {
if(this == o){
return 0;
}
CollectionItem item = (CollectionItem) o;
Card card1 = CardCache.getInstance().getCard(cardId);
Card card2 = CardCache.getInstance().getCard(item.getCardId());
if (card1.getSet() < card2.getSet()) {
return -1;
} else {
if (card1.getSet() == card2.getSet()) {
if (card1.getRarity() < card2.getRarity()) {
return 1;
} else {
if (card1.getId() == card2.getId()) { …Run Code Online (Sandbox Code Playgroud) 我的Mac目前正在运行Snow Leopard(10.6.8),我想用Java 7开发.我从Oracle的网站上下载了Java 7 OS X安装程序,开始运行它.不幸的是,我立即收到一条消息,称只有OS X Lion(10.7.3)才支持安装程序.有什么方法可以在我的机器上使用Snow Leopard获得Java 7吗?我不是为了升级我的Java而购买新的操作系统.我搜索了一些,但我找不到多少.我希望我能在这里找到一些帮助.谢谢.
我想检查Path(在Java 7中引入)是否以某个扩展名结尾.我试过这样的endsWith()方法:
Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用,因为path.endsWith(".java")返回false.endsWith()如果在最终目录分隔符(例如bar.java)之后的所有内容完全匹配,则该方法似乎仅返回true ,这对我来说不实用.
那么我该如何检查Path的文件扩展名呢?
显然Java7有一些关于循环优化的讨厌错误:谷歌搜索.
从报告和错误描述中我发现很难判断这个bug有多重要(除非你使用Solr或Lucene).
我想知道的是什么:
注意:我无法让用户使用我的程序-XX:-UseLoopPredicate来避免这个问题.
Java 7引入了java.nio.file.Path作为java.io.File 的可能替代品.
使用File,当我访问特定的文件时,我会这样做:
File parent = new File("c:\\tmp");
File child = new File(parent, "child"); // this accesses c:\tmp\child
Run Code Online (Sandbox Code Playgroud)
使用Path的方法是什么?
我认为这会起作用:
Path parent = Paths.get("c:\\tmp");
Path child = Paths.get(parent.toString(), "child");
Run Code Online (Sandbox Code Playgroud)
但是打电话parent.toString()似乎很难看.有没有更好的办法?
在此页面甲骨文的Java HotSpot虚拟机的选项,它会列出-XX:+UseCompressedStrings作为默认选项和.但是在Java 6更新29中,默认情况下它处于关闭状态,并且在Java 7 update 2中它会报告警告
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option UseCompressedStrings; support was removed in 7.0
Run Code Online (Sandbox Code Playgroud)
有谁知道删除此选项背后的想法?
有了-mx2g这个例子,选项打开了4.541秒,在Java 6更新29中关闭了5.206秒.很难看出它会影响性能.
注意:Java 7更新2需要2.0 G,而没有压缩字符串的Java 6更新29需要1.8 GB,压缩字符串只需要1.0 GB.
我是Android开发的新手.我可以使用在Android中使用JDK 7开发的现有Java代码吗?
这些函数使用xerces dom和xslt以及xpathapi.目前,当我安装Android Eclipse ADT环境时,这些功能都没有编译.我还想知道Android设备本身是否支持JRE 6或7?