小编Nee*_*aks的帖子

Integer.valueOf()与Integer.parseInt()

除了Integer.parseInt()处理减号(如文件所述),Integer.valueOf()和之间是否还有其他差异Integer.parseInt()

因为两者都不能解析,十进制千位分隔符(产生NumberFormatException),有没有一个已经可用的Java方法来做到这一点?

java string integer decimal-point

174
推荐指数
5
解决办法
19万
查看次数

Maven WAR依赖

我正在编写一个验收测试项目,由于各种原因,这依赖于另一个打包为WAR的项目.我已经设法使用maven-dependency-plugin解压缩WAR,但我无法让我的项目包含unpacked WEB-INF/lib/*.jarWEB-INF/classes/*包含在类路径中,因此构建失败.有没有办法将这些文件包含在类路径中,还是有更好的依赖WAR的方法?

非常感谢.

maven-2 war maven maven-dependency-plugin

79
推荐指数
3
解决办法
8万
查看次数

你如何"回滚"Mercurial的最后一次提交?

我有一个Mercurial存储库,我只在本地使用...这是我的个人用法(所以我不会"推"到任何地方).

我提交了3个文件,但之后我明白我应该提交4个文件...

有没有办法"回滚"我的最后一次(最新的,只有一次)提交,并"重新发送"它与正确的文件?

(我不知道为什么,但我的" 修改当前修订版 "选项不活动,所以我不能用它...)

mercurial commit rollback

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

何时以及如何将java类加载器标记为垃圾收集?

我们正在创建多个子类加载器,以将多个子应用程序加载到Java应用程序"容器"中,进行热部署原型设计.当特定类加载器的类路径发生更改(即已添加,删除,更新了jar)时,旧的类加载器将被丢弃(未引用),并为新的jar类路径创建新的类加载器.

更新类路径,触发热部署后,我们进行了堆转储.堆转储(使用Memory Analyzer)表明旧的类加载器没有被垃圾回收.父类加载器中的某些类正在缓存旧的类加载器.调用以下内容来清除这些缓存:

java.lang.ResourceBundle.clearCache(classLoader);
org.apache.commons.logging.LogFactory.release(classLoader);
java.beans.Introspector.flushCaches();
Run Code Online (Sandbox Code Playgroud)

即使在清除了上述缓存之后,旧的类加载器仍然没有被垃圾收集.对类加载器的其余引用包括以下内容:

  • 类加载器加载的类
  • java.lang.Package由类加载器本身创建
  • java.lang.ProtectionDomain由类加载器本身创建

以上所有都是类加载器中的循环引用,它应该触发垃圾回收.我不确定为什么不是.有没有人知道为什么旧的类加载器仍然没有被垃圾收集,即使有循环引用?

java garbage-collection memory-leaks classloader

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

你如何阻止Proguard删除类型参数?

我目前正试图混淆一系列库.我的基本库包含几个使用类型参数的类和方法,由于Proguard混淆删除了类型参数,因此其他代码无法使用它.消除混淆消除了这些问题.我已阅读所有ProGuard使用文档,示例和故障排除,但无法找到有关如何处理类型参数或ProGuard的哪个方面剥离类型参数的任何文档.

构造函数类型参数问题:

库1包含以下类:

public abstract class AbstractFactoryFactory<T>
Run Code Online (Sandbox Code Playgroud)

库2包含几个扩展上述类的类,但构造函数抛出一个编译器错误,指出:

error: type AbstractFactoryFactory does not take parameters
Run Code Online (Sandbox Code Playgroud)

返回类型参数问题:

库1具有Foo类,具有以下方法:

public List<String> doSomething()
Run Code Online (Sandbox Code Playgroud)

Libary 2尝试使用doSomething方法,但在混淆后,该方法返回一个无类型列表,该列表生成以下编译器错误,指出:

error: incompatible types Object
Run Code Online (Sandbox Code Playgroud)

Proguard.cfg

-dontoptimize

-renamesourcefileattribute SourceFile
-keepparameternames
-keepattributes Exceptions,*Annotation*,InnerClasses,SourceFile,LineNumberTable,Deprecated

-keep public class * {
    public protected *;
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclassmembernames class * {
    java.lang.Class class$(java.lang.String);
    java.lang.Class class$(java.lang.String, boolean);
}

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclassmembers class * implements java.io.Serializable {
    static final …
Run Code Online (Sandbox Code Playgroud)

java android proguard maven

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

Java中的WebSockets生产就绪服务器?

编辑:删除了对C#的引用,因为唯一接受的答案是关于Java.如果有人需要有关C#中websocket服务器实现的信息,请提出一个新问题.

您是否知道用Java创建WebSockets服务器的"生产就绪"框架?我找到了一个库http://nugget.codeplex.com/但我不知道它是如何稳定和快速的.

java websocket

28
推荐指数
3
解决办法
4万
查看次数

使用jdk进行slf4j日志记录 - 如何启用调试?

默认情况下,slf4j与jdk(slf4j-jdk14-1.6.1.jar)一起使用时,不会记录调试消息.我该如何启用它们?

我无法在官方文档,网络或此处找到有关如何启用它的信息.

我发现了一些信息(虽然失败了)在%JDK_HOME%/ lib中创建一个文件,并在配置文件中定义了那里的级别.但是,我想在编译/运行时定义级别,以便我可以从具有不同日志记录级别的IDE运行和调试我的应用程序.

是不是我可以设置一些环境变量,或VM arg?

java logging slf4j java.util.logging

22
推荐指数
4
解决办法
5万
查看次数

为什么要在java nio中的`selector.selectedKeys().iterator()`中删除键?

我找到了一些java nio的示例代码:

 ServerSocketChannel server = ServerSocketChannel.open();  
 Selector selector = Selector.open();  
 server.socket().bind(new InetSocketAddress(8080));  
 server.configureBlocking(false); 
 server.register(selector, SelectionKey.OP_ACCEPT);  

 while(true) {
     selector.select(); 
     Iterator iter = selector.selectedKeys().iterator();  
     while (iter.hasNext()) {  
         SelectionKey key = (SelectionKey) iter.next();  
         iter.remove();  // Why remove it? 
         process(key);  
     }
 }
Run Code Online (Sandbox Code Playgroud)

当他获得所选择的密钥时,他会删除循环中的密钥.我们为什么要这样做?


UPDATE

感谢EJPuser270349提供的答案,我想我现在明白了,让我详细解释一下.

选择器中有2个表:

  1. 注册表:当我们打电话时channel.register,会有一个新项目(密钥)进入它.只有我们打电话key.cancel(),它才会从此表中删除.

  2. 准备选择表:当我们调用时selector.select(),选择器将查找注册表,找到可用的键,将它们的引用复制到该选择表.选择器不会清除此表的项目(这意味着,即使我们selector.select()再次调用,也不会清除现有项目)

这就是我们iter.remove()从选择表中获取密钥时必须调用的原因.如果没有,我们将一次又一次地获得密钥,selector.selectedKeys()即使它还没有准备好使用.

java nio

18
推荐指数
1
解决办法
6408
查看次数

为什么java注释?

我想问为什么java注释使用了这么多...我知道他们替换了例如jpa中的xml配置,但为什么这种配置会被使用呢?考虑一下这段代码:

@Entity 
class Ent{
   // some fields
}
//... somewhere in the other file far far away
class NonEnt{
   // whatever here
}
Run Code Online (Sandbox Code Playgroud)现在,当我尝试将其置于持久化上下文中时,使用EntityManager's persist方法,我会在尝试持久化NonEnt实例时遇到运行时错误(更好的是获得编译错误).对我来说有明显的解决方案,强制实体实现一些无方法接口,而不是使用@Annotations.但这在框架设计师中并不流行,这个解决方案的缺点是什么?
谢谢回答...

java annotations marker-interfaces

15
推荐指数
2
解决办法
5052
查看次数

如何在测试套件中定义JUnit方法规则?

我有一个JUnit测试类的JUnit套件.如果在该测试方法上存在某个注释,我想套件定义一个规则,以便在运行每个单元测试之前和之后对数据库执行某些操作.

我已经能够在套件和测试类中创建一个@ClassRule,它将在每个之前执行此操作(这不够好)并且我已经能够使用测试类本身定义测试规则,但是这样是重复的,似乎不是很干.

是否可以在套件中定义每个测试方法规则,还是必须将它们添加到每个测试中?

编辑:为了澄清,我想在套件中声明代码,它将在测试类中的测试方法之间运行(即"围绕").

java junit junit4

11
推荐指数
1
解决办法
9905
查看次数