标签: java-6

通过java.util.ServiceLoader加载通用服务实现

前几天我偶然发现了一些不便,java.util.ServiceLoader并在我身上形成了一些问题.

假设我有一个通用服务:

public interface Service<T> { ... }
Run Code Online (Sandbox Code Playgroud)

我无法明确告诉ServiceLoader加载具有特定泛型类型的实现.

ServiceLoader<Service<String>> services = 
   ServiceLoader.load(Service.class); // Fail.
Run Code Online (Sandbox Code Playgroud)

我的问题是:什么是合理的方法ServiceLoader来安全地加载通用服务的实现?


在询问了上述问题之后,在Paŭlo的回答之前,我已经设法找到了解决方案.

public interface Service<T> { ...
    // true if an implementation can handle the given `t' type; false otherwise.
    public boolean canHandle(Class<?> t) { ...

public final class StringService implements Service<String> { ...
    @Override public boolean canHandle(Class<?> t) {
        if (String.class.isAssignableFrom(type)) 
            return true;
        return false;
    }

public final class DoubleService implements Service<Double> { ...
    // ...

public …
Run Code Online (Sandbox Code Playgroud)

java java-6

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

即使编译器合规性级别为1.6,Eclipse也会对枚举产生阻塞

我已将Eclipse项目设置Compiler compliance level为1.6

但我得到的错误如下面的截图:Syntax error, annotations are only available if source level is 1.5.

我已经刷新/清理/重启Eclipse至少10次.
它与Maven2编译良好.Eclipse项目由Maven2生成.
该项目使用java-6-openjdk

在此输入图像描述

java eclipse java-6

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

如何使用exec在Java中设置环境变量?

可能重复:
如何从Java设置环境变量?

我正在尝试设置一个环境变量,并将其读回以验证它是否已实际设置.

我有以下内容:

import java.io.IOException;

public class EnvironmentVariable
{
    public static void main(String[] args) throws IOException
    {
        Runtime.getRuntime().exec("cmd.exe set FOO=false");

        String s = System.getenv("FOO");
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,它似乎FOO始终为null,这意味着它可能未正确设置.

我的exec命令是否正确?javadocs声明它可以将一个字符串参数作为命令.

有任何想法吗?

java environment-variables runtime.exec java-6

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

我可以忽略BeanCreationException并注入null吗?

我们的情况是,我们的Spring连接了一些包含使用Java 6构建的ActiveMQ类的bean.我们的应用程序在客户的服务器上运行,因此我们无法保证它们安装了Java 6或更高版本.如果它们恰好具有Java 5,则应用程序无法启动,因为BeanCreationException具有依赖于ActiveMQ的类的s(根本原因是a UnsupportedClassVersionError).

所以我的问题是,有没有办法忽略a BeanCreationException仍然启动应用程序?我希望能够显示一条错误消息,说明他们需要安装Java 6或更高版本,但由于应用程序甚至无法启动,我从来没有机会这样做.

我的预感是没有办法做到这一点,因为Spring需要能够保证我的应用程序在初始化后正确构建,但我想我还是会问.关于如何实现我的最终目标的任何其他建议也将有所帮助和赞赏.

我们正在使用Spring 3.0.6

谢谢!

java spring dependency-injection java-5 java-6

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

在一些基本的解析任务中,Java 7比Java 6慢8倍

我最近注意到,自从我更新到Java 7以来,我的代码的特定部分运行速度明显变慢.令人惊讶的是,Java 7的全局速度比Java 6快.

该程序非常庞大,但我成功地提取了一个可重现的代码来演示java 7如何比Java 6慢.

如果您使用Java 6和Java 7运行完全相同的代码,您会发现Java 7比Java 6慢大约7-8倍!

这是代码(不要试图理解它的作用,它只是来自真实代码的摘要,因此并没有真正意义).它基本上是一个解析字符串以格式化其中某些部分的代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
public class CPerfJava7 extends JFrame {
    private static final long serialVersionUID = 1L;

    // +==============================================================+
    // | Attributes                                                   |
    // +==============================================================+
    JPanel mainPanel;

    public CPseudoHtmlDocument docu;
    private static long totalTime = …
Run Code Online (Sandbox Code Playgroud)

java performance swing java-6 java-7

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

在Mac OS上安装Java 6

是否可以在Mac OS 10.5上安装最新的JDK?考虑到Apple提供的版本是1.5,最好的选择是什么?

更新:我正在尝试安装JDeveloper 11,它需要JDK 6.

java macos java-6

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

单元测试最终在Java 6中阻塞

在查看我的代码覆盖率时,我注意到很多单元测试无法检查最终块,这些块试图关闭finally块中的打开InputStreams.

一个示例摘录是:

  try {
      f = new BufferedInputStream(new FileInputStream(source));
      f.read(buffer);
  } finally {
      if (f != null)
          try {
              f.close();
          } catch (IOException ignored) {
          }
      }
  }
Run Code Online (Sandbox Code Playgroud)

有没有适当的解决方案来使用JUnit4检查finally块内的所有内容?

我知道在保持最高生产力的同时,无法实现100%的代码覆盖率.然而,这些红线在报告中引人注目.

java exception-handling junit4 try-catch-finally java-6

7
推荐指数
2
解决办法
4302
查看次数

将外部文件拖入Swing应用程序时设置自定义光标

我有一个swing应用程序,我想通过将外部文件从Windows资源管理器拖到应用程序来导入外部文件.我有这个基本功能.但是,我想将默认的拖放光标图标更改为适用于应用程序的光标.在按下鼠标键并将其保持在应用程序上时,我无法更改用户可见的光标.如果拖放操作在同一个swing应用程序中,我已经看到了这个工作的示例.我试图使用DragGestureListener和DragSource来实现这一点无济于事.似乎除非拖动源在摆动范围内,否则不会调用这些方法.将外部文件拖动到swing应用程序时是否可以更改拖动光标?

请看这个简化的例子:

public class DnDTemplate extends JFrame {

private static final long serialVersionUID = 1L;
private JComponent thePane = null;
private Cursor dropCursor = null;

public DnDTemplate() {
    super( "Drop File Here" );

    thePane = (JComponent) getContentPane();
    thePane.setTransferHandler( new DndTransferHandler() );

    ImageIcon imageIcon = new ImageIcon( "drop_here.gif" );
    Image image = imageIcon.getImage();     
    BufferedImage bufferedImage = new BufferedImage( 16, 16, BufferedImage.TYPE_INT_ARGB );
    Graphics graphics = bufferedImage.getGraphics();
    graphics.drawImage( image, 0, 0, null );
    dropCursor = Toolkit.getDefaultToolkit().createCustomCursor( bufferedImage, new Point( 16, 16 ), …
Run Code Online (Sandbox Code Playgroud)

swing java-6

7
推荐指数
1
解决办法
2072
查看次数

按指定顺序运行JUnit4 Test类

我已经编写了许多测试,不仅分为不同的类,而且根据我们正在测试的应用程序的哪个区域划分为单独的子包.所以,我的包结构看起来有点像这样:

my.package.tests
my.package.tests.four
my.package.tests.one
my.package.tests.three
my.package.tests.two
Run Code Online (Sandbox Code Playgroud)

my.package.tests包中我有一个父类,子包中的所有测试都是一到四个扩展.现在,我想选择运行测试的顺序; 不在类中(这似乎可以通过FixMethodOrder注释)但是类或子包本身的顺序(所以那些在子包中one,然后在那些中two,等等).一些测试类使用参数化运行器,以防万一有所不同.测试成功不需要选择顺序,它们是相互独立的; 然而,对它们进行排序以反映通常使用程序的各个部分的顺序是有帮助的,因为它使分析更容易一些.

现在,理想情况下我想要一些配置文件告诉JUnit应该执行哪些测试顺序; 不过我猜它不会那么容易.我在这里有哪些选项,最简单的选项是什么?我也更喜欢只需列出子包,而不是包中的各种类,甚至是类中的测试函数.

我正在使用Java 1.6.0_26(我在这里没有选择)和JUnit 4.11.

java junit unit-testing junit4 java-6

7
推荐指数
1
解决办法
5728
查看次数

收到致命警报:protocol_version构建失败Gradle/Maven

我的项目之一的构建开始失败,下面给出了例外情况

   > Could not resolve org.slf4j:slf4j-api:[1.6.1,).
  > Failed to list versions for org.slf4j:slf4j-api.
     > Unable to load Maven meta-data from https://repo1.maven.org/maven2/org/slf4j/slf4j-api/maven-metadata.xml.
        > Could not GET 'https://repo1.maven.org/maven2/org/slf4j/slf4j-api/maven-metadata.xml'.
           > Received fatal alert: protocol_version
Run Code Online (Sandbox Code Playgroud)

环境:

  • Java 7
  • Gradle 3.5

java gradle maven java-6 java-7

7
推荐指数
1
解决办法
8398
查看次数