有没有办法禁用javac 1.6.0_22的限制,阻止我使用JRE内部类sun.awt.event.*?
我不是在寻找:
我只想知道它是否可能,如果是,那么如何.
关于OpenJDK邮件列表上调用的工具有一些嗡嗡声sjavac.此外,还有两个相关的JEP:JEP 139:增强javac以提高构建速度和JEP 199:智能Java编译,第二阶段.
我的问题是:
sjavac工具?免责声明:自我回答的问题.只是想将此工具的知识带到StackOverflow社区,并创建对未来sjavac FAQ的参考.
我有iso-8859-1编码的java源文件.当我运行ant时,我得到"警告:编码UTF-8的不可映射的字符".如果我运行ant -Dfile.encoding = iso-8859-1或者将encoding ="ISO-8859-1"添加到每个javac语句中,我可以避免这种情况.
有没有办法在build.xml中全局设置属性? <property name ="file.encoding"value ="ISO-8859-1">不起作用.我知道我可以添加一个foo = ISO-8859-1属性并为每个javac语句设置encoding ="$ {foo}",但我试图避免这种情况.
我知道运行javac file1.java生成file1.classif file1.java是唯一的源文件,然后我可以说java file1运行它.
但是,如果我有2个源文件,file1.java以及file2.java,那我怎么构建程序?
我的mac osx 10.7.3中有一个可疑的Java问题.以前我安装它,它工作正常.在经过一段时间的.bash_profile和.profile文件的一些更改之后,我遇到了类似的错误
Unable to locate an executable at "/usr/bin/java/bin/java"
Run Code Online (Sandbox Code Playgroud)
每当我尝试在我的终端中运行"javac"或"java"时.
echo $PATH 给出如下输出:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/sabya/Documents/Play_Framework/play-2.0:/usr/X11/bin:/usr/local/git/bin:/usr/local/mysql/bin
Run Code Online (Sandbox Code Playgroud)
我的.bash_profile看起来像:
alias start_mysql="/Library/StartupItems/MySQLCOM/MySQLCOM start"
alias stop_mysql="/Library/StartupItems/MySQLCOM/MySQLCOM stop"
export JAVA_HOME=/usr/bin/java
Run Code Online (Sandbox Code Playgroud)
输出 which java
/usr/bin/java
Run Code Online (Sandbox Code Playgroud)
它长时间困扰我,卸载和安装java并没有帮助我的运气.
我是Mac的新手,需要帮助解决这个问题.
在发布此问题之前用Google搜索并查看了SOF,但没有找到任何与我的问题相关的内容.
谢谢
Sabya
我必须在这里遗漏一些东西.
在Java 5中,引入了"for-each loop"语句(也称为增强for循环).它似乎主要是为了遍历集合而引入的.任何实现该Iterable接口的集合(或容器)类都可以使用"for-each循环"进行迭代.也许出于历史原因,Java阵列没有实现Iterable接口.但是由于数组无处不在,所以javac会接受在数组上使用for-each循环(生成相当于传统for循环的字节码).
在Java 8中,该forEach方法Iterable作为默认方法添加到接口.这使得将lambda表达式传递给集合(迭代时)成为可能(例如list.forEach(System.out::println)).但同样,阵列不喜欢这种治疗方法.(我知道有解决方法).
有没有技术上的原因为什么javac无法增强以接受forEach中的数组,就像它在增强的for循环中接受它们一样?似乎可以在不要求阵列实现的情况下生成代码Iterable.我天真吗?
这对于自然使用数组的语言的新手来说尤其重要,因为它们的语法容易.切换到列表和使用是不自然的Arrays.asList(1, 2, 3).
当我使用JDK 1.7.0在OS X上编译Spring JDBC源代码时,我收到此警告:
warning: CachedRowSetImpl is internal proprietary API and may be removed in a future release
Run Code Online (Sandbox Code Playgroud)
如何在编译期间禁止显示警告消息?
我已经知道并使用Java的@SuppressWarning注释.我正在寻找具体用法来抑制我所描述的警告.
我的问题具体是,在这行代码中:
@SuppressWarnings("valuegoeshere")
Run Code Online (Sandbox Code Playgroud)
应该用"valuegoeshere"替换什么?
编辑:人们,我知道最好避免导致警告的代码.通常这将是我的方法.但是我在这里编译第三方代码,我不想重写.我只想添加正确的注释来抑制警告,以便我可以实际做些什么的警告不会被埋没.
我正在使用javax.tools包(JDK 1.7)中的JavaCompiler来动态编译一些东西,如下所示:
compiler.run(null, null, "-cp", paths, "path/to/my/file.java");
Run Code Online (Sandbox Code Playgroud)
它可以工作,但我想在内存中完成所有操作(例如,传递带代码的字符串,而不是源文件,并获取字节代码而不是.class文件).我发现扩展InputStream和OutputStream参数是没有用的,因为它可能与控制台中的相同.你知道一种让run方法像这样工作的方法吗?或者您是否知道使用该getTask()方法确认的方法?(扩展FileManager看起来很简单但不是那么容易:)
我有一个Windows 7系统,我已经安装了最新的Java编译器.我也有最新的Cygwin.我想使用Cygwin的shell中的Java编译器.我在Cygwin中编辑了PATH变量,如下所示:
export PATH=$PATH:"/cygdrive/C/Program\ Files/Java/jdk1.6.0_23/bin/"
Run Code Online (Sandbox Code Playgroud)
我可以javac在上面的目录中看到二进制文件,但是当我尝试编译我的*.java文件时,我得到:
javac command not found
Run Code Online (Sandbox Code Playgroud)
我在设置PATH变量时做错了吗?我还需要做别的吗?我是Java的新手,对cygwin不是很熟悉.
使用Java compiler(javac)时,我们可以指定两种兼容性.一个是使用-source,另一个是使用-target.这两者有什么区别?
例如,-source 1.5和-target 1.6?
此外,是否有任何我们使用不同的源和目标兼容级别的情况?