标签: java-7

为什么PropertyDescriptor行为从Java 1.6变为1.7?

更新:Oracle已将此确认为错误.

简介:某些在JDK 1.6中工作的自定义BeanInfos和PropertyDescriptors在JDK 1.7中失败,有些只在垃圾收集运行并且清除了某些SoftReferences后才会失败.

编辑:这也将打破ExtendedBeanInfo在春季3.1,如帖子底部所述.

编辑:如果您调用JavaBeans规范的第7.1或8.3节,请准确说明规范的这些部分需要什么.在这些部分中,语言不是必要的或规范性的.这些部分中的语言是示例中的语言,这些示例最好不明确作为规范.此外,BeanInfoAPI特别允许人们更改默认行为,并在下面的第二个示例中明确区分.

Java Beans规范查找具有void返回类型的默认setter方法,但它允许通过a定制getter和setter方法java.beans.PropertyDescriptor.使用它的最简单方法是指定getter和setter的名称.

new PropertyDescriptor("foo", MyClass.class, "getFoo", "setFoo");
Run Code Online (Sandbox Code Playgroud)

这在JDK 1.5和JDK 1.6中有效,以指定setter名称,即使它的返回类型不是void,如下面的测试用例中所示:

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import org.testng.annotations.*;

/**
 * Shows what has worked up until JDK 1.7.
 */
public class PropertyDescriptorTest
{
    private int i;
    public int getI() { return i; }
    // A setter that my people call "fluent".
    public PropertyDescriptorTest setI(final int i) { this.i = i; return this; }

    @Test …
Run Code Online (Sandbox Code Playgroud)

java spring javabeans java-7

15
推荐指数
1
解决办法
7086
查看次数

使用Java 7在JTextPane中使用样式文本进行奇怪的文本包装

我有两个不同的编辑器使用JTextPane和Java 7中的奇怪错误,这些错误在以前的JVM版本中没有出现.它发生在包含样式文本或组件的长行中.

这是一个演示此错误的示例.在此示例中,每次插入字符时,都会对所有文本应用默认样式.我用JDK 1.7.0_04测试了它.

import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;

public class BugWrapJava7 extends JFrame {

    JTextPane jtp;
    StyledDocument doc;

    public BugWrapJava7() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        jtp = new JTextPane();
        add(jtp, BorderLayout.CENTER);
        jtp.setText("\ntype some text in the above empty line and check the wrapping behavior");
        doc = jtp.getStyledDocument();
        doc.addDocumentListener(new DocumentListener() {
            public void insertUpdate(DocumentEvent e) {
                insert();
            }
            public void removeUpdate(DocumentEvent e) {
            }
            public void changedUpdate(DocumentEvent e) {
            }
        });
        setSize(200, 200);
        setVisible(true);
    }
    public void insert() …
Run Code Online (Sandbox Code Playgroud)

java swing word-wrap java-7

15
推荐指数
2
解决办法
2427
查看次数

java.lang.UnsupportedOperationException:'posix:permissions'不支持作为Windows上的初始属性

我正在使用Java 7 File API.我编写了一个在Ubuntu上完美地创建目录的类,但是当我在Windows上运行相同的代码时,它会抛出错误:

Exception in thread "main" java.lang.UnsupportedOperationException: 'posix:permissions' not supported as initial attribute
    at sun.nio.fs.WindowsSecurityDescriptor.fromAttribute(Unknown Source)
    at sun.nio.fs.WindowsFileSystemProvider.createDirectory(Unknown Source)
    at java.nio.file.Files.createDirectory(Unknown Source)
    at java.nio.file.Files.createAndCheckIsDirectory(Unknown Source)
    at java.nio.file.Files.createDirectories(Unknown Source)
    at com.cloudspoke.folder_permission.Folder.createFolder(Folder.java:27)
    at com.cloudspoke.folder_permission.Main.main(Main.java:139)
Run Code Online (Sandbox Code Playgroud)

我的文件夹类代码是

package com.cloudspoke.folder_permission;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.UserPrincipal;
import java.util.Set;

public class Folder{
    // attributes required for creating a Folder
    private UserPrincipal owner;
    private Path folder_name;
    private FileAttribute<Set<PosixFilePermission>> attr;


    public Folder(UserPrincipal owner,Path folder_name,FileAttribute<Set<PosixFilePermission>> attr){
        this.owner=owner;
        this.folder_name=folder_name;
        this.attr=attr;
    }
    //invoking …
Run Code Online (Sandbox Code Playgroud)

java nio java-io java-7 unsupportedoperation

15
推荐指数
1
解决办法
2万
查看次数

在Java 7中比较Object和int

我是一名高级解决方案架构师,但我最近偶然发现了一个让我停下来思考的问题......

对我来说,下面的代码总是应该触发错误,但当我的一位同事问我为什么Eclipse没有显示错误时,我无法回答任何问题.

class A {
    public static void main(String... args) {
        System.out.println(new Object() == 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经调查过,发现在源级别为1.6时确实会抛出一个错误:

incomparable types: Object and int
Run Code Online (Sandbox Code Playgroud)

但现在在1.7中编译好了.

请问,有哪些新功能可以保证这种行为?

java eclipse autoboxing compare java-7

15
推荐指数
1
解决办法
1321
查看次数

如何使用java7文件属性apis获取数字groupid/userid?

我可以使用以下代码获取文件所有者的名称;

    final PosixFileAttributes basicFileAttributes =
        Files.readAttributes( path, PosixFileAttributes.class, 
                                    LinkOption.NOFOLLOW_LINKS );
    String ownerName = basicFileAttributes.owner().getName();
Run Code Online (Sandbox Code Playgroud)

但我也试图抓住有问题的用户的数字unix id.在调试器中,我可以看到它隐藏在"UnixFileAttributes"(PosixFileAttributes的子类)中,但是有没有合理的标准方法来获取它?

java java-7

14
推荐指数
2
解决办法
2427
查看次数

究竟是什么"不允许自我抑制",为什么Javac会产生导致此错误的代码?

这个新的Java 7 try-with-resources构造非常好.或者至少,这是很好的,直到一个例外走过来,毁了我的一天.

我终于把它归结为一个可重复的测试,它只使用JUnit + jMock.

@Test
public void testAddSuppressedIssue() throws Exception {
    Mockery mockery = new Mockery();
    final Dependency dependency = mockery.mock(Dependency.class);

    mockery.checking(new Expectations() {{
        allowing(dependency).expectedCall();
        allowing(dependency).close();
    }});

    try (DependencyUser user = new DependencyUser(dependency)) {
        user.doStuff();
    }
}

// A class we're testing.
private static class DependencyUser implements Closeable {
    private final Dependency dependency;

    private DependencyUser(Dependency dependency) {
        this.dependency = dependency;
    }

    public void doStuff() {
        dependency.unexpectedCall(); // bug
    }

    @Override
    public void close() throws IOException { …
Run Code Online (Sandbox Code Playgroud)

java exception java-7 try-with-resources

14
推荐指数
1
解决办法
6296
查看次数

Android Studio:包含Google地图时的编译器设置

我在Android Studio中创建了一个新项目,并添加了Google地图活动.

我收到这些警告:

warning: com/google/android/gms/maps/GoogleMap.class(com/google/android/gms/maps:GoogleMap.class): major version 51 is newer than 50, the highest major version supported by this compiler.
It is recommended that the compiler be upgraded.
warning: com/google/android/gms/maps/SupportMapFragment.class(com/google/android/gms/maps:SupportMapFragment.class): major version 51 is newer than 50, the highest major version supported by this compiler.
It is recommended that the compiler be upgraded.
warning: com/google/android/gms/maps/model/LatLng.class(com/google/android/gms/maps/model:LatLng.class): major version 51 is newer than 50, the highest major version supported by this compiler.
It is recommended that the compiler be upgraded.
warning: com/google/android/gms/maps/model/MarkerOptions.class(com/google/android/gms/maps/model:MarkerOptions.class): …
Run Code Online (Sandbox Code Playgroud)

java android java-7 android-studio

14
推荐指数
2
解决办法
2万
查看次数

将LogManager(l4j2)与Java 8一起使用时出错(无法解析java.lang.reflect.AnnotatedElement)

我刚刚将一个新项目的JDK版本从7u45切换到8u20时遇到了一个奇怪的错误.我的类开头的无害LogManager声明被拒绝,并出现以下错误:

无法解析java.lang.reflect.AnnotatedElement类型.它是从所需的.class文件间接引用的

这是代码:

public class Class1 {   
    private static Logger log = LogManager.getLogger(Class1.class); 
    ...
Run Code Online (Sandbox Code Playgroud)

Eclipse建议我配置构建路径,但我不知道要配置什么,因为我不知道该错误的根本问题.

使用JDK与版本7,一切正常.

java java-7 java-8 log4j2

14
推荐指数
1
解决办法
2万
查看次数

从sun.security.*包中替换类

我正在尝试将应用程序从JDK7升级到JDK8,它使用了sun.security.*包中的以下类

sun.security.x509.X509CertImpl
sun.security.pkcs11.SunPKCS11
sun.security.util.DerOutputStream
sun.security.util.DerValue
sun.security.util.ObjectIdentifier
sun.security.pkcs.PKCS10
sun.security.x509.X500Name
sun.security.pkcs11.SunPKCS11
sun.security.pkcs11.wrapper.CK_TOKEN_INFO
sun.security.pkcs.PKCS10
Run Code Online (Sandbox Code Playgroud)

这些类的使用会在所有情况下生成警告,除非sun.security.pkcs.PKCS10导致编译错误,因为此类不再存在.它似乎已经转移到另一个包sun.security.pkcs10.PKCS10.

虽然我可以简单地更改此包名并忽略其他sun.security类生成的警告,但我知道您不应该在sun.security包中使用类.如何使用JDK8公共API中的等效类替换这些类?

java security java-7 java-8

14
推荐指数
1
解决办法
3872
查看次数

Eclipse错误'UseStringDeduplication'

我安装了一个新的Ubuntu 16.04 VM,Oracle JDK 7,并下载了最新的Eclipse.但是当我尝试启动Eclipse时,我收到此错误:

Unrecognized VM option 'UseStringDeduplication'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Run Code Online (Sandbox Code Playgroud)

为什么我在全新安装时遇到此错误?删除该VM选项是一个坏主意吗?

eclipse ubuntu java-7

14
推荐指数
1
解决办法
1万
查看次数