标签: java-7

在JTextPane中包装长单词(Java 7)

在最多6个Java的所有版本中,放置在JScrollPane中的JTextPane的默认行为是:如果可能,在字边界处换行.如果没有,那么无论如何都要包装它们.

在JDK 7中,默认行为似乎是:如果可能,在字边界处换行.如果没有,只需扩展JTextPane的宽度(永远不要换长字).

这很容易重现,这是一个SSCCE:


public class WrappingTest extends JFrame
{

    public static void main ( String[] args )
    {
        new WrappingTest(); 
    }

    public WrappingTest ()
    {
        setSize(200,200);
        getContentPane().setLayout(new BorderLayout());
        JTextPane jtp = new JTextPane();
        JScrollPane jsp = new JScrollPane(jtp);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        getContentPane().add(jsp,BorderLayout.CENTER);
        setVisible(true);
    }

}
Run Code Online (Sandbox Code Playgroud)

只需在JDK 6和JDK 7中运行它,写一些小字,然后写一个长字,你就会看到差异.

我的问题很简单...... JDK 7中的新默认行为完全混淆了我的程序(他们应该更加小心Oracle更改这种默认值......它们似乎并不重要但是当你使用JTextPane显示时通常包含非常长的字母串的数据,它们并不是那么不重要 - 实际上我要提交错误报告,但是我想在/如果它们不解决它的情况下有一个解决方法).有什么方法可以回到以前的行为?

请注意,我已经检查了相关问题的答案.如何在JTextPane中实现自动换行,以及如何使其包装不带空格的字符串?但是它没有回答这个问题 - 它提供了一种使JTextPane包装完全不考虑空白的方法,但对我来说,如果可能的话,所需的行为是在空白处分割行,如果不可能的话,在其他地方(如以前的Java)版本).

java swing jtextpane word-wrap java-7

16
推荐指数
2
解决办法
5063
查看次数

Java 1.6和1.7 jarsigner有什么区别

注意,您无法使用Java 1.7 jarsigner签署Android APK.所以我想知道为什么这是1.6和1.7签名者有什么区别?

jarsigner java-6 java-7

16
推荐指数
2
解决办法
8828
查看次数

Java 1.7 varargs函数报告为未经检查的警告

我们使用了一些varargs函数,当我们转向java 1.7时,我们得到了一个奇怪的未经检查的警告.

功能在接口ICache中添加

public interface ICache<O> {
    void add(Object source, O... objects);
}
Run Code Online (Sandbox Code Playgroud)

在界面中报告错误.

ICache.java:18: warning: [unchecked] Possible heap pollution from parameterized vararg type O
    void add(Object source, O... objects);
  where O is a type-variable:
    O extends Object declared in interface ICache
1 warning
Run Code Online (Sandbox Code Playgroud)

O扩展了Object,作为其通用缓存类.

我阅读了xlint警告并且我们在未经检查的情况下编译,但是http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#xlintwarnings似乎暗示这个错误应该是[varargs]类型不是未经检查的类型.

我错过了什么吗?

java javac variadic-functions java-7 heap-pollution

16
推荐指数
1
解决办法
6249
查看次数

如何更改tomcat编译器

我正在尝试在字符串功能上使用新的Java 7开关.

但是Tomcat没有合作.

我确保tomcat在java 7下运行,但它似乎没有在它下面进行编译.

我已将以下内容添加到jsp servlet条目下的web.xml文件中

    <init-param>
        <param-name>compiler</param-name>
        <param-value>C:/Program Files/Java/jdk1.7.0/bin/javac.exe</param-value>
    </init-param>
Run Code Online (Sandbox Code Playgroud)

但它似乎没有做到这一点.

任何提示将不胜感激.

tomcat java-7

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

编译错误:"'<>'不能与匿名类一起使用"

我非常想写这个:

Lists.transform(vals,
    new Function<>() {
        public List<ValEntry> apply(Validator<? super T> input) {
            return input.validate(value);
        }
    });
Run Code Online (Sandbox Code Playgroud)

...比这个:

Lists.transform(vals,
    new Function<Validator<? super T>, List<ValEntry>>() {
        public List<ValEntry> apply(Validator<? super T> input) {
            return input.validate( value );
        }
    });
Run Code Online (Sandbox Code Playgroud)

但Java编译器给我以下错误消息:

'<>' cannot be used with anonymous classes
Run Code Online (Sandbox Code Playgroud)

有这个根本原因吗?或者刚刚跳过JDK 7中的功能,也许它们是在8中完成的?

java java-7

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

警告:在最后一轮中创建的类型为"[在此处插入类]"的文件不会受到注释处理

我将现有的代码库切换到Java 7,我不断收到此警告:

warning: File for type '[Insert class here]' created in the last round 
  will not be subject to annotation processing.
Run Code Online (Sandbox Code Playgroud)

快速搜索显示没有人发出此警告.

它没有在javac编译器源中记录:

从OpenJDK\langtools\src\share\classes\com\sun\tools\javac\processing\JavacFiler.java

private JavaFileObject createSourceOrClassFile(boolean isSourceFile, String name) throws IOException {
    checkNameAndExistence(name, isSourceFile);
    Location loc = (isSourceFile ? SOURCE_OUTPUT : CLASS_OUTPUT);
    JavaFileObject.Kind kind = (isSourceFile ?
                                JavaFileObject.Kind.SOURCE :
                                JavaFileObject.Kind.CLASS);

    JavaFileObject fileObject =
        fileManager.getJavaFileForOutput(loc, name, kind, null);
    checkFileReopening(fileObject, true);

    if (lastRound) // <-------------------------------TRIGGERS WARNING
        log.warning("proc.file.create.last.round", name);

    if (isSourceFile)
        aggregateGeneratedSourceNames.add(name);
    else
        aggregateGeneratedClassNames.add(name);
    openTypeNames.add(name);

    return new FilerOutputJavaFileObject(name, fileObject);
}
Run Code Online (Sandbox Code Playgroud)

这意味着什么以及我可以采取哪些步骤来清除此警告?

谢谢.

java java-7

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

为什么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
查看次数

如何导入和使用com.sun.jdi.VirtualMachine

我找到了一些专门用于在VirtualMachine中进行调试的com.sun.jdi类,但我不能使用它,因为Sun JDK7中似乎不存在包.

如何使用这个包?

BTW.lib/sa-jdi.jar是不是我想要的

java jdi java-7

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

在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
查看次数

java.nio.file.Files.delete(Path path) - 偶尔使用SimpleFileVisitor以递归方式删除目录失败

尝试在Java中java.nio.file.DirectoryNotEmptyException递归删除从Delete目录中删除的递归删除方法中的偶然问题

代码(归功于@TrevorRobinson):

static void removeRecursive(Path path) throws IOException {
    Files.walkFileTree(path, new SimpleFileVisitor<Path>() {

        final Logger logger = LoggerFactory.getLogger(this.getClass());
        @Override
        public FileVisitResult visitFile(Path file,
                BasicFileAttributes attrs) throws IOException {
            logger.warn("Deleting " + file.getFileName());
            Files.delete(file);
            logger.warn("DELETED " + file.getFileName());
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(Path file, IOException exc) {
            // try to delete the file anyway, even if its attributes could
            // not be read, since delete-only access is theoretically possible
            // I NEVER SEE …
Run Code Online (Sandbox Code Playgroud)

file-io nio java-io java-7

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