小编Jef*_*rey的帖子

Java 7中简化的Varargs方法调用

在Java 7中,您可以选择放置@SafeVarargs注释以抑制在使用不可重新生成的varargs参数编译方法时获得的警告.Project Coin的提议规定,当方法确保只有与varargs参数相同类型的元素存储在varargs数组中时,才应使用注释.

什么是非安全方法的例子?

java generics variadic-functions java-7

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

构造函数中的泛型推理

如果我有课Foo:

public class Foo<T> {
    public Foo(T t) {
        //do something
    }

    public static <E> void bar(E e) {
         //do something
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么Foo.bar("String");推断它E是一个String(因此不会抛出编译器警告),但new Foo("String");不推断它T是一个String?

java generics

13
推荐指数
1
解决办法
2098
查看次数

找到FileStore的目录

我正试图找到一种方法来检测闪存驱动器何时插入我的计算机.到目前为止,我发现的解决方案是轮询FileSystem#getFileStores更改.这确实告诉我什么时候插入了闪存驱动器,但据我所知,没有办法检索它的位置.FileStore#type并且FileStore#name它们看起来都非常不可靠,因为它们的返回值是特定于实现的,但它们似乎是唯一可能返回任何可能有助于查找目录的相关信息的方法FileStore.

考虑到这一点,以下代码:

public class Test {
    public static void main(String[] args) throws IOException {
        for (FileStore store : FileSystems.getDefault().getFileStores()) {
            System.out.println(store);
            System.out.println("\t" + store.name());
            System.out.println("\t" + store.type());
            System.out.println();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

给我这个输出:

/ (/dev/sda5)
    /dev/sda5
    ext4

/* snip */

/media/TI103426W0D (/dev/sda2)
    /dev/sda2
    fuseblk

/media/flashdrive (/dev/sdb1)
    /dev/sdb1
    vfat
Run Code Online (Sandbox Code Playgroud)

事实证明,FileStore#type返回驱动器的格式并FileStore#name返回驱动器的设备文件的位置.据我所知,唯一具有驱动器位置的toString方法是方法,但从中提取路径名称似乎很危险,因为我不确定该特定解决方案在其他操作系统上的表现如何Java的未来版本.

有没有我在这里缺少的东西,或者纯粹用Java是不可能的?

系统信息:

$ java -version
java version "1.7.0_03"
OpenJDK Runtime Environment (IcedTea7 2.1.1pre) (7~u3-2.1.1~pre1-1ubuntu2)
OpenJDK Client VM (build …
Run Code Online (Sandbox Code Playgroud)

java nio2

11
推荐指数
1
解决办法
5898
查看次数

我应该在ReferenceQueue上同步吗?

我正在查看源代码,WeakHashMap并偶然发现:

private final ReferenceQueue<Object> queue = new ReferenceQueue<>();

private void expungeStaleEntries() {
    for (Object x; (x = queue.poll()) != null; ) {
        synchronized (queue) {
           /* snip */
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这个方法同步ReferenceQueueWeakHashMap本身并不声称是线程安全的:

与大多数集合类一样,此类不同步.可以使用Collections.synchronizedMap方法构造同步的WeakHashMap.

这使我相信这个实现细节是以某种方式确保ReferenceQueue自身的线程安全(因为GC将自己修改它Thread).但是,文档ReferenceQueue中没有提到任何关于任何并发问题的内容,并且看一下源代码,ReferenceQueue发现它甚至没有自身同步(它使用内部锁).

为什么WeakHashMap同步它ReferenceQueue呢?我ReferenceQueue每次使用它时都应该同步吗?

java concurrency

10
推荐指数
1
解决办法
1042
查看次数

如何获取另一个应用程序的图标?

所以在我正在制作的这个应用程序中,用户点击一个按钮,然后该按钮启动一个程序.此按钮将具有应用程序的标题和图标.我只需要知道如何获得图标,有点像这样:Windows http://goo.gl/5WjdT

所以我想知道的是:

  1. 有没有真正的方法在Java中执行此操作
  2. 如果是这样,你会怎么做?

提前致谢!

java windows

10
推荐指数
2
解决办法
3484
查看次数

为什么ScheduledExecutorService.shutdown()使用100%的CPU?

我有以下简单的代码:

package main;

import java.util.concurrent.*;

public class Main {

    public static void main(String[] args) throws InterruptedException {
        new Main();
    }

    public Main() throws InterruptedException {
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
        executor.schedule(new MyRunnable(), 10, TimeUnit.SECONDS);
        System.out.println("Shutting down...");
        executor.shutdown();
        System.out.println("Awaiting termination...");
        executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES);
        System.out.println("Main finished!");
    }

    private class MyRunnable implements Runnable {
        public void run() {
            System.out.println("Finished running!");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

实际上,虽然我的真实代码比这更复杂,但我可以在这些方面隔离问题.代码基本上等待10秒运行runnable,然后通知主程序的结束.

但是,我注意到了10秒钟,我的核心之一用于100%.

如果我评论这一行:

executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES);
Run Code Online (Sandbox Code Playgroud)

cpu核心也以100%使用,主程序也在Runnable之前完成.

如果我评论这一行:

executor.shutdown();
Run Code Online (Sandbox Code Playgroud)

cpu已正确使用但程序无法完成.

如果我评论前两行,则cpu正确使用但主程序无法完成.

  1. 我的代码有问题吗?
  2. 正在executor.shutdown(); 做某种忙碌的等待而不是仅仅禁用提交新任务?
  3. 或者我应该责怪JVM?

附加细节:

$ java -version
java version "1.6.0_26" …
Run Code Online (Sandbox Code Playgroud)

java linux concurrency executor busy-waiting

9
推荐指数
1
解决办法
4170
查看次数

JTextPane换行

不同的是JTextArea,JTextPane没有选择关闭换行.我找到了一个解决JTextPane s中换行的方法,但对于这样一个简单的问题来说它似乎太冗长了.有一个更好的方法吗?

java swing jtextpane

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

为什么SwingWorker#setProgress限于[0,100]?

SwingWorker#setProgressIllegalArgumentException如果参数不是从0到100 ,则抛出一个.我认为该setProgress方法的主要目的是更新a JProgressBar(就像在本教程中一样).如果是这种情况,为什么SwingWorkerJProgressBar进度不受限制时,将进度限制为[0,100] ?

java swing progress swingworker

8
推荐指数
2
解决办法
1501
查看次数

如何在SocketChannel关闭时收到通知?

我想,当被通知SocketChannel有其close调用的方法.我首先想到的是创建该通知时,监听器的包装implCloseSelectableChannel方法被调用(因为该close方法本身声明finalAbstractInterruptibleChannel).这个解决方案有效,但当我尝试注册时,Selector我会得到一个IllegalSelectorException因为以下检查SelectorImpl:

/*     */   protected final SelectionKey register(AbstractSelectableChannel paramAbstractSelectableChannel, int paramInt, Object paramObject)
/*     */   {
/* 128 */     if (!(paramAbstractSelectableChannel instanceof SelChImpl))
/* 129 */       throw new IllegalSelectorException();
Run Code Online (Sandbox Code Playgroud)

现在,我不能覆盖register的方法来委托给包裹SocketChannel,因为它宣布finalAbstractSelectableChannel,我无法实现SelChImpl,因为它在默认的知名度sun.nio.ch包.我可以看到从这里出发的唯一方法是使我自己SelectorProviderSelector,但是,似乎是矫枉过正的东西那么简单.

是否有更简单的方法SocketChannel在关闭时收到通知或我是否需要重新考虑我的程序设计?

SocketChannelWrapper 例:

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketOption; …
Run Code Online (Sandbox Code Playgroud)

java nio wrapper

8
推荐指数
1
解决办法
6382
查看次数

读取和解析Java异常

我有一个小系统,我想提供一个可以分析错误/异常并提出可能的解决方案的产品.

所以我想要一种解析java Exception的方法(因为我只在日志中使用它们[我不想影响实际的系统]).

解析之后,我想将它保存在数据库中,并将其与以前保存的异常(以某种格式)进行比较,以便找到最接近的匹配异常.

我想到了以下想法:"在D处C处的A处的XException"将保存为[XException,A,B,C,D],我将以某种方式在我的DB中搜索:[XException,?,?, ?]哪个最接近.例如:[XException,A,G,C,D]非常好.

您如何看待这些想法?

任何有效的方法来解析异常?

有效或更好的方法来定义两个例外之间的距离?

知道任何可以做到这一点的开源 - 我觉得没有找到任何.

谢谢.

java regex parsing exception

8
推荐指数
1
解决办法
5491
查看次数