我刚刚阅读了Java7中的增强功能( http://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html).在那里,我看到了Underscores Numeric Literals并尝试了Like ....
int i=9_000; 没关系.
但我看到规则,它也允许...
int i=9____________________________________________________________________________________000;
Run Code Online (Sandbox Code Playgroud)
有没有结束Underscores?
我有一个类,它扩展了一个Swing组件,如:
public class MyCustomClass extends JComboBox
Run Code Online (Sandbox Code Playgroud)
这里的问题是我得到编译器警告:
JComboBox是原始类型.应参数化对泛型类型JComboBox的引用
我不确定参数化JComboBox,以便从这里进一步扩展的任何类都可以使用任何类型的对象.我试图把它作为扩展JComboBox,等等,但这不起作用.任何建议,将不胜感激.
我正在尝试一个简单的方法,删除文件的上层目录,如果它们是空的,直到它到达基本目录,但我不能使它工作.
它删除文件及其父目录,但是,它的下一个父项在它抛出时不会被删除DirectoryNotEmptyException.它确实是空的,因为只有一个子目录,并且它在上一次迭代中被删除.
因此,文件被删除,其父项被删除,并在那里停止,不再删除上层目录.
编辑:(修改后的代码)
似乎延迟删除目录,因此在下一次检查目录的空白状态时,前一个目录尚未删除.所以我添加了一个while循环来检查,直到该目录不存在.我不知道这是不是一个坏技术,但它适合我的需要.
public static void removeFileAndParentsIfEmpty(Path path) throws IOException {
if(path == null || path.endsWith(FilesPath.BILLS_DIRECTORY)) {
return;
}
if (Files.isRegularFile(path)){
Files.deleteIfExists(path);
} else if (Files.isDirectory(path)){
if(path.toFile().list().length == 0){
Files.delete(path);
while(Files.exists(path));
}else{
return;
}
} else {
return;
}
removeFileAndParentsIfEmpty(path.getParent());
}
Run Code Online (Sandbox Code Playgroud)
如果有人能提供更好的解决方案,那么这个问题仍然需要批准.谢谢.
我对正在进行的程序进行了一些更改,并且我已经将Java从Java 6更新为Java 7.
我在CentOS 5.8 32位VM上运行程序.
在Java更新之前,它工作正常.
现在该过程不是以错误开头的:
[root@CentOS-58-i-0 bin]# ./agent.sh start
Starting Agent.....d. running (23442).
Error: dl failure on line 864
Error: failed /agent/jre/lib/i386/client/libjvm.so,
because /agent/jre/lib/i386/client/libjvm.so:
cannot restore segment prot after reloc: Permission denied
Run Code Online (Sandbox Code Playgroud)
我已经在线检查过,解决方案/解决方法就是运行命令:
setenforce 0
Run Code Online (Sandbox Code Playgroud)
它会起作用.
阅读setenforce命令的文档,我不明白它的作用以及它是如何解决问题的.
所以我的问题是:
setenforce命令会解决它?setenforce一般情况.有没有办法设置Java 7,所以它会自动更新?我在Windows 7,64bit上使用JDK标准版.Java 6会自动检查更新并提示您安装它们.但是,Java 7似乎没有任何更新机制.甚至Java控制面板中的"更新"选项卡也消失了.
我目前正在做一个需要显示大量数据的小型个人项目,我突然想到实现一种可缩放的用户界面,允许用户浏览大量数据.
我知道ZVTM和Piccolo2d这样的现有项目,我可能会最终用于这项工作,但我也很想开始编写自己的项目.但是,我有点不确定如何开始.
从我一直在阅读的内容看来,像Piccolo2d这样的项目是由于Java中缺乏"场景图"管理而开发的,Piccolo2d是基于"Pad","Pad ++"等老项目的工作而开发的. '爵士乐'.
经过一段时间的谷歌搜索,我可以看到JavaFX中提供了场景图管理,但我想知道Java 7中的Swing是否具有此功能.
我有一点想法,我想知道是否有可能使用JLayerAPI 实现基本的缩放界面,实质上是根据当前缩放级别装饰具有不同层的对象.
举个例子,假设我可以看到最远缩放级别的目录,放大后会显示目录的内容,进一步放大会显示目录中存在的文件内的文本.我一直在玩Eagle Mode一段时间,所以这是我正在考虑的一个完美的例子.
我知道这是一个很长的问题(如果它真的是一个问题).基本上,让我们假装Piccolo等人不存在,而我所拥有的只是核心Java 7 JDK,任何人都能提出一个好的起点吗?
似乎Piccolo2d在很大程度上依赖于Java2d API,所以我想知道API是否已经进步,或者Java 7引入了新的机制来实现类似的效果.
我对任何可以提供的意见或建议感兴趣.我知道这不是一项容易的任务,但没有任何时间限制,它只是一个个人项目.
谢谢
尝试在IntelliJ中运行单元测试时出现以下错误.从谷歌搜索它似乎与使用JDK7和Powermock不兼容有关.经常出现的建议是添加-XX:-UseSplitVerifier标志.我按照以下说明试过这个:( 如何在Mac上的IntelliJ IDEA中增加IDE内存限制?)但是继续得到错误.
还有其他人有这个问题并解决了吗?
java.lang.VerifyError: Inconsistent stackmap frames at branch target 48 Exception Details: Location:
com/marketplace/impl/MarketplaceLibTestBase.<init>(Lorg/powermock/core/IndicateReloadClass;)V @48: aload_2 Reason:
Type uninitializedThis (current frame, locals[2]) is not assignable to 'com/marketplace/impl/MarketplaceLibTestBase' (stack map, locals[2]) Current Frame:
bci: @34
flags: { flagThisUninit }
locals: { uninitializedThis, 'org/powermock/core/IndicateReloadClass', uninitializedThis, 'org/powermock/core/IndicateReloadClass', top, 'java/lang/Object' }
stack: { 'java/lang/Object', 'java/lang/Object' } Stackmap Frame:
bci: @48
flags: { flagThisUninit }
locals: { uninitializedThis, 'org/powermock/core/IndicateReloadClass', 'com/marketplace/impl/MarketplaceLibTestBase', 'org/powermock/core/IndicateReloadClass' }
stack: { } Bytecode:
0000000: 2a2b 4e4d 1312 9bb8 129d …Run Code Online (Sandbox Code Playgroud) 我想知道方法add()中的2个声明之间的区别,如下所示.
final int c;
c = 20;
Run Code Online (Sandbox Code Playgroud)
和
final int c = 20;
Run Code Online (Sandbox Code Playgroud)
我认为两者都是最终变量,我无法重新分配任何新值.以下是以不同方式处理上述声明的方法.
void add() {
final int a = 30;
final int b = 10;
final int c;
c = 20;
switch (a) {
case b + c:
System.out.println("In case b+c");
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
抱怨,上面的方法根本没有编译
常数表达式需要案例b + c
如果声明变量c并在一行中初始化,例如final int c = 30;.有用.
我不是Java专家,只是体验Java 5和Java 7上以下程序输出的变化.任何人都知道Java 7中HashMap实现的变化是什么吗?
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "111");
map.put("a", "aaa");
map.put("A", "AAA");
map.put("D", "DDD");
map.put("d", "ddd");
map.put("0", "000");
map.put("B", "BBB");
map.put("b", "bbb");
map.put("2", "222");
for(Map.Entry<String, String> entry : map.entrySet()){
System.out.println(entry.getKey()+ " "+entry.getValue());
}
}
}
Run Code Online (Sandbox Code Playgroud)
Java 7上的输出
D DDD
2 222
d ddd
1 111
0 000
b bbb
A AAA
B BBB
a aaa
Run Code Online (Sandbox Code Playgroud)
Java 5上的输出
0 000
1 111 …Run Code Online (Sandbox Code Playgroud) 我有一个实用程序方法,可以从某些对象中创建一个元素列表:
public static final <T> List<T> list(T t) {
final List<T> rv = new ArrayList<>();
rv.add(t);
return rv;
}
Run Code Online (Sandbox Code Playgroud)
我也有一个接受type参数的方法List<Class<?>>。因此,我必须创建该类型的对象。这是我尝试做的事情:
final Class<?> aClass = Integer.class;
final List<Class<?>> trivialListOfClasses = list(aClass);
Run Code Online (Sandbox Code Playgroud)
……这失败了:
[javac] /some/path/Foo.java:41: error: incompatible types
[javac] final List<Class<?>> trivialListOfClasses = list(aClass);
[javac] ^
[javac] required: List<Class<?>>
[javac] found: List<Class<CAP#1>>
[javac] where CAP#1 is a fresh type-variable:
[javac] CAP#1 extends Object from capture of ?
[javac] 1 error
Run Code Online (Sandbox Code Playgroud)
完成上述任务的正确方法是什么?我了解有关Java泛型不变的部分,但是到底发生了什么?