为什么要在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)
这里发生了什么?
我正在读关于Console课程,在第一行,它是写的
Java 6的新手,当我们
Java SE 6从命令行运行时,我们通常使用控制台类对象
那么,这意味着我们通过命令行隐式使用控制台类?
然后,我开始寻找有关Console类的更多细节,我在java和Console链接中找到了来自控制台类的Input.所以,总结了一些观点
- 控制台类只能在IDE之外使用
System.console().readLine();Consoleclass 从控制台读取密码或密码,并使用回显禁用readPassword()
虽然,我们有Scanner类和BufferedReader类来从控制台读取输入,并且是在早期添加的Java 5.那么,仅仅因为安全原因Console类被添加了Java 6?或者是否有其他优势可以使用本课程.
有人可以分享更多关于Console课程的细节吗
我在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,但错误消息是"无效标志".
刚刚开始使用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(以及其他)中有以下依赖项:
我已经在线查看,但这似乎是我所需要的,尽管我还没有确定在jar中找到了适合String和JAXB/JSON的提供程序类.
我想打包一段绝对必须在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设置环境变量?
我正在尝试设置一个环境变量,并将其读回以验证它是否已实际设置.
我有以下内容:
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声明它可以将一个字符串参数作为命令.
有任何想法吗?
为什么这段代码不能编译?
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 7 SimpleDateFormat通过字符X(而不是大写或小写Z)在ISO 8601格式的类中引入了支持.在Java 6中支持这样的格式需要预处理,因此最好的方法是问题.
这种新格式是Z(大写Z)的超集,另外还有两种变体:
因此,正如人们可以从Java 7文档中SimpleDateFormat看到的那样,以下3种格式现在是有效的(而不仅仅是ZJava 6中涵盖的第二种格式),当然,等效:
正如之前关于支持这种"扩展"时区格式的特殊情况的问题所讨论的那样,始终使用':'作为分隔符,将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中使用泛型,但它并不像我想的那么好
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中更安全吗?
我们的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,但我们没有改变任何东西.
发生了什么,我们如何解决它?