标签: java-7

ForkJoinPool似乎浪费了一个线程

我正在比较测试程序的两个变体.两者都ForkJoinPool在具有四个内核的机器上使用4线程运行.

在'模式1'中,我非常像执行器服务使用池.我把一堆任务扔进去ExecutorService.invokeAll.我获得了比普通的固定线程执行器服务更好的性能(即使有调用Lucene,那里也有一些I/O).

这里没有分而治之的.从字面上看,我做到了

ExecutorService es = new ForkJoinPool(4);
es.invokeAll(collection_of_Callables);
Run Code Online (Sandbox Code Playgroud)

在'模式2'中,我向池中提交单个任务,并在该任务中调用ForkJoinTask.invokeAll来提交子任务.所以,我有一个继承自的对象,RecursiveAction它被提交到池中.在该类的compute方法中,我调用了invokeAll来自不同类的对象集合,这些对象也继承自RecursiveAction.出于测试目的,我只提交第一个对象的一次一个.我天真地期望看到所有四个线程忙什么,因为线程调用invokeAll将为自己抓取一个子任务而不是仅仅坐着和阻塞.我可以想到为什么它可能不会那样工作的一些原因.

在VisualVM中观察,在模式2中,一个线程几乎总是在等待.我希望看到的是调用invokeAll的线程立即开始处理其中一个被调用的任务,而不仅仅是静坐.这肯定比使用普通线程池尝试此方案所导致的死锁更好,但仍然是什么?它是否保留一个线程,以防其他东西被提交?而且,如果是这样,为什么模式1中的问题不同?

到目前为止,我一直使用添加到java 1.6的引导类路径的jsr166 jar来运行它.

java fork-join java-7

6
推荐指数
1
解决办法
3046
查看次数

在java中使用FileVisitor的正确方法

我试图遍历整个路径及其单层子目录.对于每个文件,我需要读取五个数据字段并将它们输出到分隔的文本文件.我能够从单个文本文件中读取并在屏幕上验证我的输出; 之后我被卡住了.我似乎无法为FileVisit找到合适的参数.一些具体问题是我在下面发布的代码中的注释.虽然我不是那么远,但是我想知道写一个输出文件,即我希望把它放在哪个地方是最合乎逻辑的.

我已经在文件访问者http://docs.oracle.com/javase/7/docs/api/上查看了/sf/ask/693941/和JavaDocs的信息.
index.html?java/nio/file/FileVisitor.html.但是,我仍然无法让FileVisitor正常工作.

@Bohemian建议将interface到class,我所做的一切.

 import java.nio.files.*;
 public class FileVisitor<T> 
 {
      Path startPath = Paths.get("\\CallGuidesTXT\\");
      Files.walkFileTree(startPath, new SimpleFileVisitor(startPath))
      \\             ^^^^^^    
      \\ errors out, <identifier expected>          
          { 
          @Override
          public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
              throws IOException
          {
              Files.list(file);
              return FileVisitResult.CONTINUE;
          }
        // do my file manipulations here, then write the delimited line 
        // of text to a CSV fle...is this the most appropriate place for that 
        // operation in this …
Run Code Online (Sandbox Code Playgroud)

io java-7 filevisitor

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

Eclipse 3.5和Java 7

有什么方法可以将Eclipse 3.5的Java编译器合规性级别提高到1.7.(即)添加插件/插件.因为默认情况下这不支持JDK 1.7合规性.

我们在Eclipse升级中有一个约束,因为它是一个RCP应用程序.

对此的任何想法将不胜感激.

谢谢.

java eclipse rcp java-7

6
推荐指数
2
解决办法
4350
查看次数

Java泛型与递归类型参数绑定

我有一个基类Thing,它提供了一些基本功能,包括ThingInfo使用类的类型参数获取对a的引用Thing.因为Java没有自我类型,所以我不能将它用于ThingInfo返回值的类型参数,所以Thing必须采用递归类型参数来允许我们返回正确的参数化ThingInfo.

interface ThingInfo<T>
{
    // just an example method showing that ThingInfo needs to know about
    // the type parameter T
    T getThing();
}

class Thing<T extends Thing<T>>
{
    // I need to be able to return a ThingInfo with the type parameter
    // of the sub class of Thing. ie. ThingA.getThingInfo() must return
    // a ThingInfo<ThingA>.
    // This is where Java would benefit from self types, as …
Run Code Online (Sandbox Code Playgroud)

java generics javac java-7

6
推荐指数
1
解决办法
1545
查看次数

Java Swing - 如何在ActionListener中处理泛型

我有:

class CustomerActionListener implements ActionListener
{
  @Override
  public void actionPerformed(ActionEvent event)
  {
    JComboBox cb = (JComboBox)event.getSource();
    .. do something
  }
}
Run Code Online (Sandbox Code Playgroud)

这导致jdk7中的以下编译器警告:

JComboBox是原始类型.应参数化对泛型类型JComboBox的引用

我试图将它参数化为:

JComboBox<String> cb = (JComboBox<String>)event.getSource();
Run Code Online (Sandbox Code Playgroud)

但这仍然留下以下编译器警告:

类型安全:未选中从Object转换为JComboBox

因此我不确定如何消除编译器警告......

java generics swing java-7

6
推荐指数
1
解决办法
2393
查看次数

jdk7:sun.font.fontManager替换/如何从fontname获取文件名信息

使用Oracle(Sun)JDK6并尝试迁移到Oracle JDK7

我sun.awt.GraphicsEnvironment用来查找所有系统字体,以便使用它们来更改我的pdf文件中使用的pdf字体.这是我正在使用的确切代码:

GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();

// get all system fonts
final Font[] fonts = gEnv.getAllFonts();
Run Code Online (Sandbox Code Playgroud)

之后我需要在系统上获得确切的字体文件路径,所以我使用:

FontManager.getFontPath(true) + "/" +
               FontManager.getFileNameForFontName(font_name);
Run Code Online (Sandbox Code Playgroud)

现在的问题是,sun.font.FontManager它不再是一个类,而是已经转换为接口.我在网上搜索并提出了一些我不满意的解决方案,我正在寻找其他想法来帮助解决我的问题.

我发现的解决方案:

  1. 在Java 6而不是Java 7上部署我的项目(不建议使用Java 7中的一些新功能).
  2. 我在网上找到了FontManager类的代码,但是使用它需要包含很多其他的类/接口,这个过程看起来很虚拟且耗时.如果我被允许使用该代码,因为它是Sun公司的专利,我也不是.

我需要的是:*一种在系统上找到确切字体文件路径的方法*.欢迎所有想法.

java fonts java-7 jdk-internal-api

6
推荐指数
1
解决办法
3768
查看次数

为什么我在Netbeans中收到此编译警告?

我正在开发一个涉及Glassfish 3.1.2.2的Java-EE项目,客户端组件正在运行Java 7 Update 21.基于Swing的客户端以前基于Java 6 Update 38,直到我们决定迁移到新的Java 7 Update 21.

我在Netbeans 7.3中收到以下编译警告:

warning: Supported source version 'RELEASE_6' from annotation processor 'org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor' less than -source '1.7'
Run Code Online (Sandbox Code Playgroud)

此时,编译过程会持续大约1分钟.

顺便说一句,我们仍然使用由Netbeans平台提供的javaee-api-6.0.jar(我认为还没有javaee-api-7.0.jar可用吗?)

有人知道这个警告的原因以及如何摆脱它吗?

任何帮助高度赞赏 - 非常感谢提前.

java netbeans java-ee java-7

6
推荐指数
1
解决办法
3161
查看次数

Java 7 - LinkOption - 为什么NOFOLLOW_LINKS是唯一可用的选项?

我认为标题说明了一切.我如何指定FOLLOW_LINKS?为什么只用一个选项创建一个枚举?例如,方法java.nio.file.Files.getLastModifiedTime(Path,LinkOption ...)将一个LinkOption-s数组作为参数.你必须通过一些东西,但你只能通过一个可用的选项.这令我感到惊讶,并希望了解更多信息.

java symlink nio java-7 linkoption

6
推荐指数
1
解决办法
5410
查看次数

使用Java 7编写包含非英语字符的文件名时,zip条目不正确

我正在尝试开发可以处理具有非英文字符(变音符号,阿拉伯语等)的压缩文件的代码,但压缩文件包含不正确的名称.我使用的是java版本1.7.0_45因此它不应该是由于这里提到的错误.我正在为ZipOutputStream构造函数将字符集设置为UTF-8,并且按照Javadocs它应该按照我的要求工作.

我确信zip文件正在正确写入,因为尝试从文件中读取条目会提供正确的文件名(如预期的那样).

但是,当我尝试使用Ubuntu默认的ArchiveManager/Unzip工具打开/解压缩时,文件名会混乱.

这是我的代码:

private void convertFilesToZip(List<File> files) {
    FileInputStream inputStream = null;
    try {
        byte[] buffer = new byte[1024];

        FileOutputStream fileOutputStream = new FileOutputStream("zipFile.zip");

        ZipOutputStream outputStream = new ZipOutputStream(fileOutputStream, Charset.forName("UTF-8"));

        for (File file : files) {
            inputStream = new FileInputStream(file);
            String filename = file.getName();
            System.out.println("Adding file : " + filename);
            outputStream.putNextEntry(new ZipEntry(filename));

            int length;

            while ((length = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, length);
            }
            outputStream.closeEntry();
        }

        if(inputStream != null) inputStream.close();
        outputStream.close();
        System.out.println("Zip …
Run Code Online (Sandbox Code Playgroud)

java zip special-characters java-7

6
推荐指数
1
解决办法
459
查看次数

Rethrow异常真实的应用

在Java 7中增加了Rethrow Exception功能.我知道它的概念,但我想看到它的真实应用以及为什么需要这个功能?

java exception java-7

6
推荐指数
1
解决办法
144
查看次数