标签: java-7

Java 7中对动态语言的支持是什么样的?

看来JSR 292将为JVM添加对动态语言的支持,但我没有看到很多关于它的细节.动态类型是否会被合并到语言中(或仅仅是VM)?如果是这样,语义会是什么样子?

会不会有类似C#4的东西:

dynamic x = 10, y = 5;
Console.WriteLine(x + y);
Run Code Online (Sandbox Code Playgroud)

java jvm java-7

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

从Clojure调用可变参数Java函数的问题

我正在玩JDK 7的Java NIO.2 API.

特别是,我想调用方法: Paths#get(String first, String... more)

这是一个静态方法,它至少接收一个字符串,并返回与之对应的Path对象.有一个重载的形式:Paths#get(URI uri)

但是,我似乎无法从Clojure调用top方法.我最近能得到的是:

(Paths/get ^String dir-fq (object-array 0))
Run Code Online (Sandbox Code Playgroud)

失败的是:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)

正如你所料.毕竟,我们将Object []传递给期望String []的东西.

我已经尝试删除(对象数组)表单 - 但这只会导致Clojure尝试调用get(URI)方法 - 无论是否有类型提示.

将nil作为Paths#get(String,String ...)的第二个参数传递会导致调用正确的方法,但Java 7随后会因NPE而失败.

我似乎无法在Clojure中找到表达String []类型的方法 - 我猜我需要这样做或者为调度系统提供一个提示.

有任何想法吗?

java clojure java-7

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

SecondaryLoop而不是SwingWorker?

从SecondaryLoop的文档中,不清楚何时应该使用这个新功能而不是SwingWorker,一些有趣的案例会很有用.

java swing swingworker java-7 secondaryloop

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

在OS X Lion上使用Java 7中的JTable进行setValueAt的虚假调用?

在升级到Lion和Java 7后,我遇到了JTables的问题.当我使用箭头键移动选择时,它setValueAt()使用空字符串作为编辑值进行调用.

为了测试这个,我创建了一个带有表的简单JFrame,并将以下类设置为其模型.

public class SpyModel extends AbstractTableModel {
    public int getColumnCount() { return 5; }
    public int getRowCount() { return 5; }
    public Object getValueAt(int rowIndex, int columnIndex) { return ""; }
    public boolean isCellEditable(int rowIndex, int columnIndex) { return true; }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        System.out.println(aValue == null ? "null" : "\"" + aValue + "\"");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在Java 6下运行它,然后使用箭头键移动它.它工作正常.例如

$ java -version
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build …
Run Code Online (Sandbox Code Playgroud)

java swing java-7 osx-lion

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

在Java 7中将sun.locale.formatasdefault设置为true

以下代码将有助于说明我的问题:

import java.util.Locale;
import java.text.*;

public class LocaleTest {
   public static void main(String[] args) {
      System.out.println(Locale.getDefault());
      System.out.println("java-version-" +System.getProperty("java.version"));
      System.setProperty("sun.locale.formatasdefault","true");
      System.out.println("prop:" +System.getProperty("sun.locale.formatasdefault"));
      System.out.println("getLocale-" +Locale.getDefault());
   }
}
Run Code Online (Sandbox Code Playgroud)

我们知道,在Java 7中,Locale.getDefault()中存在错误.但是,正如Oracle所建议的那样,我将系统属性"sun.locale.formatasdefault"设置为true.即使我现在正在获取我的m/c Locale,它仍然显示为en_US,即使我的m/c Locale设置为fr_BE.

以下是上述代码的输出,它是在Java 1.7.0_09上编译和运行的:

en_US
java-version-1.7.0_09
prop:true
getLocale-en_US

关于可能导致什么的任何想法?提前谢谢了.

java java-7

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

Java 7中的抗锯齿发生了什么?

我有一段代码,用于获取文本并生成带阴影效果的图标以分配给各种组件(如下所示).在Java 7中,这种方法起到了很大作用,其中反锯齿逻辑中的某些内容发生了变化,现在看起来非常糟糕,而在Java 6中,相同的代码看起来很棒.

最后一张图片实际上看起来还不错,所以似乎只会出现某些颜色组合......

无论如何,有没有人知道Java 7中AA的变化,或者如何更改它或者像Java 6中那样工作?或者我为了打破AA而抱怨谁?哈哈...

在此先感谢您的帮助!

AA http://i43.tinypic.com/v5v5vr.jpg

package mainpackage;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.font.TextAttribute;
import java.awt.font.TextLayout;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.AttributedString;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class AntiAliasProblems
{
    private static final long serialVersionUID = 1L;
    private static Font font = new Font("Arial", Font.BOLD, 12);

    public static ImageIcon makeShadowIcon1()
    {
        AttributedString as = new AttributedString("Delete"); …
Run Code Online (Sandbox Code Playgroud)

java swing antialiasing java-7

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

a = a.trim()和a.trim()之间有什么区别?

我遇到了一点混乱.

我知道那个String对象是不可变的.这意味着如果我从String类中调用一个方法,replace()那么原始内容String就不会改变.而是基于原始返回new String.但是,可以为同一变量分配新值.

基于这个理论,我总是写a = a.trim()在那里a是一个String.一切都很好,直到我的老师告诉我,a.trim()也可以使用.这搞砸了我的理论.

我和老师一起测试了我的理论.我使用了以下代码:

String a = "    example   ";
System.out.println(a);
a.trim();      //my teacher's code.
System.out.println(a);
a = "    example   ";
a = a.trim();  //my code.
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

    example   
    example   
example
Run Code Online (Sandbox Code Playgroud)

当我向老师指出时,她说,

这是因为我使用的是较新版本的Java(jdk1.7)并且a.trim() 在以前版本的Java中工作.

请告诉我谁有正确的理论,因为我完全不知道!

java string jdk1.4 java-7

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

Java:线程生产者消费者等待生成数据的最有效方法是什么

使用BlockingQueue消耗生成的数据时,等待数据出现的最有效方法是什么?

场景:

步骤1)数据列表将是添加时间戳的数据存储.这些时间戳需要按最接近当前时间优先级排序.此列表可能为空.线程将时间戳插入其中.生产

步骤2)我想在另一个线程中使用此处的数据,该线程将从数据中获取时间戳并检查它们是否在当前时间之后.消费者然后生产

步骤3)如果它们在当前时间之后,则将它们发送到另一个线程以供消费和处理.在此处理时间戳数据后,从步骤1数据存储中删除.消费然后编辑原始列表.

在下面的代码中,数据字段引用步骤1中的数据存储.结果是在当前时间之后已发送的时间戳列表.步骤2.然后将结果消耗步骤3.

private BlockingQueue<LocalTime> data;
private final LinkedBlockingQueue<Result> results = new LinkedBlockingQueue<Result>();

@Override
public void run() {
  while (!data.isEmpty()) {
    for (LocalTime dataTime : data) {
      if (new LocalTime().isAfter(dataTime)) {
        results.put(result);
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

问题 等待数据列表中可能可能为空的数据的最有效方法是什么?专注于:

while (!data.isEmpty())
Run Code Online (Sandbox Code Playgroud)

以前的问题.

java multithreading producer-consumer blockingqueue java-7

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

是否有默认的ExecutorService,或者我注定要创建一个并维护它以获取Future objetcs?

根据Future我的理解,获得a的唯一方法是使用an ExecutorService,例如通过获取Executors.newFixedThreadPool(10)(顺便说一句,你如何使用多少线程?是否有一些拇指规则?).

所以我不明白,我是否应该使用:

ExecutorService executorService = Executors.newFixedThreadPool(n);
Run Code Online (Sandbox Code Playgroud)

然后保存它(例如在某些顶层IoC)并executorService在需要新的时候调用它Future?

是不是像ExecutorService我可以使用的默认Java内置,从而避免了ExecutorService初始化和维护的唠叨?

java concurrency multithreading android java-7

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

Java 8与Java7集合接口:自引用实例

我正在阅读Java8集合界面文档.我注意到Java8 Collection Interface在描述中添加了这一段,它不包含在Java7 Collection Interface中.

执行集合的递归遍历的某些集合操作可能会失败,而自引用实例的例外情况是集合直接或间接包含自身.这包括clone(),equals(),hashCode()和toString()方法.实现可以可选地处理自引用场景,但是大多数当前实现不这样做.

关于为什么要包含这一段,我有点困惑.是因为Java7不能拥有直接或间接包含自身集合的自引用实例吗?然后Java8引入了新的界面或一些允许的新功能?

我正在寻找详细的解释,如果你举一个例子来说明你的观点,那将会很棒.谢谢!

java-7 java-8

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