标签: java-7

JSR305与JSR308(Java类型Anotations) - 哪个将成为标准?

似乎有两种不同的JSR用于注释.

JSR-305:软件缺陷检测的注释 (附加资源)
JSR-308:Java类型的注释 (附加资源)

两者似乎都面向静态代码分析.

你知道吗:

  • 哪两个都将在Java SE 7或Java EE 6中?
  • 每个JSR的"稳定"程度如何?
  • 那个人是否取代(或过时)另一个人?

java jsr305 java-7

18
推荐指数
2
解决办法
7095
查看次数

Findbugs给出了"System.out的空指针取消引用",为什么?

我正在使用Java 1.7,Eclipse 3.7和市场上的FindBugs插件.这个例子和天堂一样好:

class Application
{
  public static void main( String[] args )
  {
    System.out.println( "Bla" );
  }
}
Run Code Online (Sandbox Code Playgroud)

此消息在过去不存在,内部实现始终在系统中:

public final static PrintStream out = null;
Run Code Online (Sandbox Code Playgroud)

所以Findbugs是对的,但现在消息发生了什么改变?

java eclipse findbugs java-7

18
推荐指数
2
解决办法
6259
查看次数

OpenJDK JVM是否与Oracle Java SE JVM相同?

我知道Oracle Java SE包含不属于OpenJDK的闭源扩展和工具,但是Oracle Java SE JVM与OpenJDK JVM相同,或者Oracle在将其作为Java SE JVM发布之前是否对OpenJDK JVM进行了更改?

更新1: 我从JDK7更新项目中找到了一些信息:http://openjdk.java.net/projects/jdk7u/qanda.html

7 Update Project是否会收到Oracle的安全修复程序?

是.

与OpenJDK 6一样,安全修复程序首先保密,并在被推送到公共森林之前应用于私有森林,作为影响JDK发布列车的修复程序的一般同步发布的一部分.此外,他们不会通过公共代码审查和回拨审批流程,他们在项目问题跟踪器中的相应问题将不会公开显示.

java openjdk jvm java-7

18
推荐指数
1
解决办法
9587
查看次数

为什么Java 7 Files.walkFileTree在遇到远程驱动器上的tar文件时抛出异常

我Files.WalkFileTree()用来导航文件夹和计算音频文件,但遇到tar文件时出现问题,它似乎将它视为一个实际的文件夹我期望它只是跳过它.

我看不到任何让我控制这种行为的选项

码:

package com.jthink.songkong.fileloader;


import com.jthink.songkong.cmdline.SongKong;
import com.jthink.songkong.ui.MainWindow;

import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.concurrent.Callable;
import java.util.logging.Level;

/**
 * Count the number of files that can be loaded, for information purposes only
 */
public class CountFilesinFolder implements Callable<Boolean> {
    public static class CountFiles
            extends SimpleFileVisitor<Path> {
        private int fileCount = 0;
        private final PathMatcher matcher;

        CountFiles(String pattern) {
            matcher =
                    FileSystems.getDefault()
                            .getPathMatcher("regex:" + pattern);
        }

        /**
         * Find Music file
         *
         * @param file
         * @param attr
         * …
Run Code Online (Sandbox Code Playgroud)

java tar java-7 nio2

18
推荐指数
1
解决办法
4402
查看次数

二进制Java 7 for Mac

在任何地方都有Java 7的二进制版本(使用Mac/BSD端口项目)吗?一些博客(例如,在Mac OS X上构建Java 7)有详细的说明从源代码构建jdk,但我希望有人可以下载它的二进制文件.

这些说明的问题在于让所有版本号都正确是非常烦人的,而轻微的变化可能会导致浪费时间.

java binary macos release java-7

17
推荐指数
2
解决办法
8125
查看次数

Java 7中泛型类变量访问的变化

下面是一些使用Java 6编译但不能在Java 7中编译的代码的简单示例.

public class Test<T extends Test> {

  private final int _myVar;

  public Test(int myVar) {
    _myVar = myVar;
  }

  public int get(TestContainer<T> container){
    T t = container.get();
    return t._myVar;
  }

  private static class TestContainer<T extends Test> {
    private final T _test;
    private TestContainer(T test) {
      _test = test;
    }
    public T get(){
      return _test;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在Java 7中,它无法在get(TestContainer<T> container)方法中编译,错误如下:

错误:_myVar在Test中具有私有访问权限

我不明白为什么这不再编译 - 在我看来它应该.变量t是类型T,必须扩展Test.它试图从类中访问_myVar实例的字段.TestTest

实际上,如果我将方法更改为get(TestContainer<T> …

java compiler-construction generics access-modifiers java-7

17
推荐指数
1
解决办法
1858
查看次数

通用类在Java 6中编译,但不在Java 7中编译

我在Java 6中有一个正确编译的接口:

public interface IMultiMap<K, V> extends Map<K, Set<V>> {

    public int valueSize();

    public boolean put(K key, V value);

    public void clear(Object key);

    public boolean isEmpty(Object key);
}
Run Code Online (Sandbox Code Playgroud)

但在Java 7中,此接口无法编译.我得到一个编译错误boolean put(K, V),它具有相同的擦除V put(K, V).编译器的完整错误:

error: name clash: put(K#1,V#1) in IMultiMap and put(K#2,V#2) in Map have the same erasure, yet neither overrides the other
    public boolean put(K key, V value);
  where K#1,V#1,K#2,V#2 are type-variables:
    K#1 extends Object declared in interface IMultiMap
    V#1 extends Object declared in interface …
Run Code Online (Sandbox Code Playgroud)

java generics collections java-6 java-7

17
推荐指数
1
解决办法
2439
查看次数

为什么java 1.7中的字体与1.6不同?

我一直在用Java构建开发环境(作为一个小型研究项目).作为其中的一部分,我构建了一个自定义文本组件,使用Graphics2d绘制文本本身,如下所示:

g2.drawString("some text", 100, 100);
Run Code Online (Sandbox Code Playgroud)

使用1.6(我假设这是由Apple提供),所有东西都在Eclipse中很好地开发,直到我打包并运行java 1.7(由Oracle提供).显然在开发环境中字体非常重要,所以我很不高兴看到1.7中的结果.

在此输入图像描述

我尝试过包装自定义字体,但它们都显得粗糙和腐蚀.上面的比较并不算太差,但有些字体(如摩纳哥)看起来很糟糕.

我猜这与Apple如何将事物挂钩到Quartz有关.但有没有办法改善事物,所以它在其他系统上看起来并不可怕?有没有人有这个策略?

更新:这是摩纳哥的比较: 在此输入图像描述

以及摩纳哥C(在paintComponent中)的缩放比较(左边是1.7,右边是1.6).请注意,我正在使用以下方法从本地ttf文件加载字体:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("monaco.ttf");
Font customFont = null;
try
{
customFont = Font.createFont(Font.TRUETYPE_FONT, is);
customFont = customFont.deriveFont(16.0f).deriveFont(Font.BOLD);
                    is.close();
                    ge.registerFont(customFont);
                } catch (FontFormatException e1)
                {
                    e1.printStackTrace();
                } catch (IOException e1)
                {
                    e1.printStackTrace();
                }
this.setFont(customFont);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

另请注意,使用以下命令打开抗锯齿:

 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                    RenderingHints.VALUE_ANTIALIAS_ON);
Run Code Online (Sandbox Code Playgroud)

java fonts java-7

17
推荐指数
1
解决办法
1854
查看次数

从jdk1.7.0_25迁移到jdk1.7.0_40时的性能回归

我正在将Spring 3.1.2批处理应用程序迁移jdk1.7.0_25到jdk1.7.0_40x64和Oracle.

使用Sun OperatingSystemMXBean.getProcessCpuTime()作为性能指标,结果显示性能下降2.5倍(即,我在u25上运行的应用程序要快得多).

  • 据我所知,这不是由于java.util.HashMap和java.util.ArrayList 更改,因为当使用u25的HashMap和ArrayList类引导u40时结果是相同的,并且这些更改对于这种差异来说太小了.
  • 这关系到HashMap中并发也不是回归作为应用程序是单线程和回归固定在U40 ..
  • Hotswap优化似乎也不是问题,因为运行-Xbatch并-Xcomp产生相同的结果(假设这些JDK之间的服务器编译是相同的).
  • 有一个表现回归,java.lang.invoke.MethodHandles但似乎无关.除非Spring 3.1.2使用它们 - 我找不到它的证据.
  • javac 编译似乎也没有改变.

一些一般性说明:

  • 每个JDK 7版本> = u40(以及最新的JDK 8 jdk1.8.0)都会出现此问题,而版本<u40似乎很好(包括各种版本的JDK 6).
  • 传统的Java代码(例如,运行1000*1000*1000*some_calc)不不具备此性能问题,也就是说,不知我的代码或使用库正在做一些奇怪和意外?
  • 测试是使用相同的数据库实例(MSSQL 2008 R2)完成的,而不是它应该重要.
  • 即使OperatingSystemMXBean不可靠,测试的挂起时间也是不同的.
  • 在这两种情况下,GC似乎都是在相同的时间和相同的持续时间内启动的(我一直在+UseSerialGC用于测试).
  • 分析显示没有异常的新热点,尽管它通常显示应用程序的执行时间大幅增加.
  • 测试这些Sun JDK或OpenJDK版本的x86版本(我已经使用过这些版本)不会改变结果.
  • 所有测试的代码(在JDK 6上运行时除外)都是使用编译的jdk1.7.0_40.
  • 在两台不同的计算机上测试了相同的场景:x64和x86.

任何提示或想法?

编辑添加:应用程序的结构是一个外部循环,运行金融蒙特卡罗模拟:即大量的日期,计算等.因此,它目前有点复杂,我同意,不适合找到问题.我将不得不尝试将其缩小.

java performance java-7

17
推荐指数
1
解决办法
441
查看次数

JDK 1.7 vs JDK 1.6内部类继承差异

我正在解决一些Java难题,并偶然发现了这个:

public class Outer {
    class Inner1 extends Outer {}
    class Inner2 extends Inner1 {}
}
Run Code Online (Sandbox Code Playgroud)

在编译此代码的同时,javac 1.6.0_45我正如预期的那样得到此错误:

Outer.java:8: cannot reference this before supertype constructor has been called
class Inner2 extends Inner1 {}                                                                                                
^
Run Code Online (Sandbox Code Playgroud)

这是因为编译器为Inner2具有类似代码的类生成默认构造函数,这解释了上面的错误:

Inner2 () {
    this.super();
}
Run Code Online (Sandbox Code Playgroud)

现在很明显,因为你真的不能在Java 1.6.0_45,JLS 8.8.7.1中做到这一点(我可以猜到):

构造函数体中的显式构造函数调用语句可能不引用此类或任何超类中声明的任何实例变量或实例方法,或者在任何表达式中使用this或super; 否则,发生编译时错误.

请参阅(奇怪情况下接受的答案,"在调用超类型构造函数之前无法引用此内容")

但是,如果我尝试用javac 1.7.0_79它编译它- 它没关系!

这就是问题 - 在Java 1.7中已经改变了什么,这个代码现在是正确的?

提前致谢!

java inner-classes java-6 java-7

17
推荐指数
1
解决办法
558
查看次数