标签: java-6

解析Java 6字符串文字中的unicode转义问题...?

为什么要在java 6(Sun 1.6.0_16)中编译:

System.out.println("\u000B");
Run Code Online (Sandbox Code Playgroud)

......但不是这个:

System.out.println("\u000A");
Run Code Online (Sandbox Code Playgroud)

在这个计划上:

public class Test {
  public static void main(String argv[]) {
  System.out.println("\u000A");
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到了

Test.java:3: unclosed string literal
System.out.println("\u000A");
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

java unicode java-6

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

我们何时应该使用控制台类?

我正在读关于Console课程,在第一行,它是写的

Java 6的新手,当我们Java SE 6从命令行运行时,我们通常使用控制台类对象

那么,这意味着我们通过命令行隐式使用控制台类?

然后,我开始寻找有关Console类的更多细节,我在javaConsole链接中找到了来自控制台类的Input.所以,总结了一些观点

  1. 控制台类只能在IDE之外使用System.console().readLine();
  2. Consoleclass 从控制台读取密码或密码,并使用回显禁用readPassword()

虽然,我们有Scanner类和BufferedReader类来从控制台读取输入,并且是在早期添加的Java 5.那么,仅仅因为安全原因Console类被添加了Java 6?或者是否有其他优势可以使用本课程.

有人可以分享更多关于Console课程的细节吗

console bufferedreader java.util.scanner java-5 java-6

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

指定动态编译的输出路径

我在Java 6中的动态编译工作正常.但是,我想改变输出路径.我已经尝试了很多东西(我会饶了你)无济于事.无论如何,这是工作代码

String[] filesToCompile = { "testFiles/Something.java" };
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(filesToCompile);
CompilationTask task = compiler.getTask(null, fileManager, null,null, null, compilationUnits);
System.out.println("Good? " + task.call());
Run Code Online (Sandbox Code Playgroud)

但输出转到源目录,这不是我想要的.

我怀疑答案可能在于答案,compiler.getTask但API并不是非常清楚某些参数可能意味着什么.或者也许使用fileManager.我试过了

fileManager.setLocation(StandardLocation.locationFor("testFiles2"), null);
Run Code Online (Sandbox Code Playgroud)

但同样,猜测可能不是一个好主意.

谢谢!

编辑:我也试过使用选项,这样(对不起,如果有更紧凑的方式):

    final List<String> optionsList = new ArrayList<String>();
    optionsList.add("-d what");
    Iterable<String> options = new Iterable<String>() {         
        public Iterator<String> iterator() {
            return optionsList.iterator();
        }
    };
Run Code Online (Sandbox Code Playgroud)

然后将选项传递给getTask,但错误消息是"无效标志".

java dynamic-compilation java-6

9
推荐指数
2
解决办法
5364
查看次数

在Jersey 2中使用默认的Providers/MessageBodyWriters

刚刚开始使用Jersey,我一直试图在最新的Jersey文档" 构建响应 "中重现这个简单的例子.据我所知,这部分应该说明如何Response以及如何ResponseBuilder使用它来轻松地将响应与Entity<T>响应内容一起返回.

现在,文档声明默认支持几种数据类型(此处:' Representations和Java types ').String其中最重要的是,匹配任何媒体类型.

在我尝试的所有变化中,以下是最简单的:

@POST
public Response post() {
    URI createdUri;
    try {
        createdUri = new URI("http://test.lan");
    } catch (final URISyntaxException e) {
        throw new WebApplicationException(e);
    }

    return Response.created(createdUri).entity(Entity.text("someContent")).build();
}
Run Code Online (Sandbox Code Playgroud)

在调用请求时,我总是得到相同的错误(下面的完整堆栈跟踪): org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/plain, type=class javax.ws.rs.client.Entity, genericType=class javax.ws.rs.client.Entity.

我相信它说的是找不到这个Entity泛型类型的合适提供者.但是,应该支持字符串OOTB?

我发现这StringMessageProvider可能是这个提供程序的Jersey 1实现,而我在Jersey 2库中找到的最接近的相关类org.glassfish.jersey.message.internal是jersey-common中的类.在众多提供商StringMessageProvider中,我认为这是一个潜在的预期提供商.

我已经查找了这个问题,虽然有很多人在错误地尝试使用自定义提供程序时得到了这个,但我发现默认的OOTB提供程序无法正常工作.

我已经检查了我的libs,现在我的pom(以及其他)中有以下依赖项:

  • 新泽西州容器servlet的核心
  • 球衣的客户端
  • 球衣常见
  • 球衣服务器

我已经在线查看,但这似乎是我所需要的,尽管我还没有确定在jar中找到了适合String和JAXB/JSON的提供程序类.

上下文

  • Maven项目
  • 与tomcat servlet-api 6.0.29
  • 所有提到的球衣库的2.6版本
  • Eclipse kepler
  • 使用tomcat6 …

rest jax-rs java-6 jersey-2.0 server

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

Java:包装Java 1.5和1.6代码的最简单方法

我想打包一段绝对必须在Java 1.5上运行的代码.如果VM是1.6 VM,则代码的一部分可以"增强"程序.

基本上这是这个方法:

 private long[] findDeadlockedThreads() {
    // JDK 1.5 only supports the findMonitorDeadlockedThreads()
    // method, so you need to comment out the following three lines
    if (mbean.isSynchronizerUsageSupported())
      return mbean.findDeadlockedThreads();
    else
      return mbean.findMonitorDeadlockedThreads();
  }
Run Code Online (Sandbox Code Playgroud)

什么是最简单的方法在1.5上进行编译,然后在1.6时进行1.6方法调用

在过去,我通过编译一个独特的1.6类来做类似的事情,我将使用我的应用程序打包并在1.6上使用ClassLoader实例化(因为1.6 JVM非常适合混合0x32和0x31类),但我认为这是一个有点矫枉过正(有点痛苦,因为在构建过程中你必须构建0x31和0x32 .class文件).

如果我想在1.5上编译上述方法,我该怎么办?也许使用反射然后如何(我根本不熟悉反射)

注意:如果你很好奇,上面的方法来自这篇文章:http://www.javaspecialists.eu/archive/Issue130.html

(但我不想像在文章中那样"评论三行",我希望它能在1.5和1.6上编译并运行)

java class java-5 java-6

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

如何使用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万
查看次数

Java自身类型递归类型参数和javac中的继承错误

为什么这段代码不能编译?

public class x
{
    private void test()
    {
        handle(new ThingA());
        handle(new ModifiedThingA());
    }

    private <T extends BaseThing<T>, X extends T> java.util.List<T> handle(X object)
    {
        return object.getList();
    }

    private static class BaseThing<T extends BaseThing<T>>
    {
        public java.util.List<T> getList()
        {
            return null;
        }
    }

    private static class ThingA
        extends BaseThing<ThingA>
    {
    }

    private static class ModifiedThingA
        extends ThingA
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

Java 6在handle(new ModifiedThingA());以下版本中给出了此错误:

x.java:6: <T,X>handle(X) in x cannot be applied to (x.ModifiedThingA)
            handle(new ModifiedThingA());
            ^
Run Code Online (Sandbox Code Playgroud)

Java 7甚至不喜欢handle(new …

java generics javac java-6 java-7

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

Java 6中对ISO 8601格式的通用支持

Java 7 SimpleDateFormat通过字符X(而不是大写或小写Z)在ISO 8601格式的类中引入了支持.在Java 6中支持这样的格式需要预处理,因此最好的方法是问题.

这种新格式是Z(大写Z)的超集,另外还有两种变体:

  1. "分钟"字段是可选的(即,2位而不是4位时区有效)
  2. 冒号字符(':')可用于将2位"小时"字段与2位"分钟"字段分开.

因此,正如人们可以从Java 7文档中SimpleDateFormat看到的那样,以下3种格式现在是有效的(而不仅仅是ZJava 6中涵盖的第二种格式),当然,等效:

  1. -08
  2. -0800
  3. -08:00

正如之前关于支持这种"扩展"时区格式的特殊情况的问题所讨论的那样,始终使用':'作为分隔符,将Java 7功能向后移植到Java 6中的最佳方法是将类子SimpleDateformat类化并覆盖其parse()方法,即:

public Date parse(String date, ParsePosition pos)
{
    String iso = ... // Replace the X with a Z timezone string, using a regex

    if (iso.length() == date.length())
    {
        return null; // Not an ISO 8601 date
    }

    Date parsed …
Run Code Online (Sandbox Code Playgroud)

java regex date simpledateformat java-6

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

集合比通用类型的标准列表更安全?

我在Java中使用泛型,但它并不像我想的那么好

public static void add(List l, Object o) {
    l.add(o);
}

public static void main(String[] args) throws Exception {
    List<Integer> list = new ArrayList<Integer>();
    add(list, "1.23");
    add(list, 1.23);
    System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)

所有这些编译和工作.当我从list异常中获取值时抛出.

它能在Java 6中更安全吗?

java generics java-6

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

Jenkins Sonar插件突然停止工作

我们的Jenkins构建在一夜之间失败并出现错误:

[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7:sonar (default-cli) on project <project>: 
Execution default-cli of goal org.codehaus.mojo:sonar-maven-plugin:2.7:sonar failed: 
Unable to load the mojo 'sonar' in the plugin 'org.codehaus.mojo:sonar-maven-plugin:2.7' due to an API incompatibility:
org.codehaus.plexus.component.repository.exception.ComponentLookupException: org/codehaus/mojo/sonar/SonarMojo :
Unsupported major.minor version 51.0
Run Code Online (Sandbox Code Playgroud)

Jenkins服务器仍在运行Java 6,但我们没有改变任何东西.

发生了什么,我们如何解决它?

java-6 jenkins sonarqube

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