包名称与文件夹结构不同,但Java代码仍然编译

我正在使用Notepad ++编写我的Java代码和命令提示符来编译和运行它。 以下是我的示例Java代码, package abraKadabra; public class SuperClass{ protected int anInstance; public static void main(String [] abc){ System.out.println(“Hello”); } } 但是,此文件位于以下文件夹结构中: “usingprotected \ superPkg”(usingProtected是C中层次结构中的某个文件夹:) 所以,我的包名在这里应该像usingProtected.superPkg而不是我编写的abraKadabra。 但是,当我从命令提示符编译这个Java代码时,它编译得很好,没有错误或警告。 为什么会这样? 软件包名称是否应该遵循文件夹结构? 如果它应该,它会如何坚持? 例如,如果我的包名是usingProtected.superPkg,编译器将以相反的顺序检查。 目前的工作目录应该是superPkg,那么父目录应该是使用保护并完成它。 它是如何用包名检查文件夹结构的?

Java HashMap重复元素

我想在hashmap上添加重复元素 所以: put(“name1”, 1); put(“name1”, 3); put(“name1”, 3); put(“name2”, 1); put(“name2”, 3); 我怎么能这样做?

java.util.Hashtable线程安全吗?

已经有一段时间了,因为我已经将哈希表用于任何重要的事情,但我似乎记得get()和put()方法是同步的。 JavaDocs没有反映这一点。 他们只是说Hashtable类是同步的。 我能假设什么? 如果多个线程同时访问哈希表(假设它们没有修改相同的条目),则操作将成功,对吧? 我想我要问的是“java.util.Hashtable线程安全吗?” 请指导我摆脱这个问题……

List根元素的XStream别名

我希望能够根据列表中包含的对象类型对根列表元素进行别名。 例如,这是我目前的输出: Gold Silver Bronze 这就是我想要的样子: Gold Silver Bronze 我可以在全球范围内这样说,所有列表都应该别名为硬币,但我有很多不同的列表,这是行不通的。 关于如何做到这一点的任何想法? 似乎应该很简单,但当然,事实并非如此。 编辑:我应该指定,我正在尝试将对象序列化为xml。 我使用Spring 3 MVC作为我的Web框架。

校验和失败:Kerberos / Spring / Active Directory(2008)

我们无法使用Kerberos / AD身份validation来使用Spring Web应用程序,我认为该问题与Kerberos票证和Active Directory域function级别的加密类型有关。 基本设置是: 雄猫7 Java 1.6(29) Windows Server 2008 R2 spring3.0 Spring Security Kerberos / Spnego扩展M2详见: http : //blog.springsource.com/2009/09/28/spring-security-kerberos/ 我有一个环境,其中Active Directory域function级别是Windows Server 2003,一切正常,如果客户端登录到域,则客户端按预期进行身份validation。 使用kerbtray检查此环境中的票证我可以看到它们都具有票证加密类型和密钥加密类型“RSADSI RC4-HMAC”。 我有一个function级别为Windows Server 2008的新域,这是身份validation不起作用的地方。 尝试validation票证时返回的应用程序错误是: Kerberos validation not successful… Caused by: GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed) at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Unknown Source) at sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source) at […]

使用Eclipse和Maven调试打包为WAR的Java Web应用程序的最佳方法?

我以前没有构建过Java Web应用程序,但我已经完成了测试,Maven正在构建我的WAR文件。 它是一个多模块Maven项目,并且依赖模块都将其JAR文件放在WAR的WEB-INF / lib目录中。 所以一切似乎都很好,但如何调试? 我知道如何(从命令行)在我的机器上运行Tomcat中的WAR。 我也认为我知道如何从命令行设置和运行Maven Jetty插件。 但是如何最好地调试…我喜欢Eclipse的所有断点和变量检查? 我应该创建某种启动配置,还是远程连接调试器? Eclipse中有什么东西可以帮助…就像一个插件?

如何让java系统发布Soft References?

我将使用基于SoftReference的缓存(一个非常简单的事情)。 但是,我在为它编写测试时遇到了一个问题。 测试的目的是检查缓存是否在内存清理发生后再次从服务器请求先前缓存的对象。 在这里,我找到了如何使系统释放软引用对象的问题。 调用System.gc()是不够的,因为在内存不足之前不会释放软引用。 我在PC上运行此unit testing,因此VM的内存预算可能非常大。 ==================后来添加============================== 谢谢所有照顾的人! 在考虑了所有职业选手和反对者之后,我决定按照nanda和jarnbjo的建议采取蛮力方式。 然而,似乎JVM并不是那么愚蠢 – 如果你要求一个比VM的内存预算更大的块,它甚至都不会尝试垃圾收集。 所以我修改了这样的代码: /* Force releasing SoftReferences */ try { final List memhog = new LinkedList(); while(true) { memhog.add(new long[102400]); } } catch(final OutOfMemoryError e) { /* At this point all SoftReferences have been released – GUARANTEED. */ } /* continue the test here […]

如何获取在testng拆卸方法中运行的测试方法的名称?

基本上,我有一个拆解方法,我想登录到控制台,测试刚刚运行。 如何获得该字符串? 我可以获取类名,但我想要刚刚执行的实际方法。 public class TestSomething { @AfterMethod public void tearDown() { system.out.println(‘The test that just ran was….’ + getTestThatJustRanMethodName()’); } @Test public void testCase() { assertTrue(1==1); } } 应该输出到屏幕:“刚刚运行的测试是…. testCase” 但是,我不知道getTestThatJustRanMethodName实际上应该是什么魔法。

如何在Web应用程序中重新加载资源包?

我有资源包作为Java类从数据库中读取值。 当我更新数据库我需要重新加载包,但我不知道如何。 有人帮忙吗? package model.helpers; public class Messages_en extends ListResourceBundle { protected Object[][] getContents() { // from DB // … } } 在视图中我使用bundle如下:

你好世界的工作,但然后得到错误,没有主要的?

我在Java中有以下简单的hello世界: class A { static { System.out.println(“Hello world”); } } 它按预期工作,但奇怪的是,它给出了一个错误,说主要方法之后不存在。 $ javac A.java && java A Hello world Exception in thread “main” java.lang.NoSuchMethodError: main 为什么? 我应该忽略它吗? 我甚至试过制作一个名为“main”的方法,但它什么都没改变。 class A { static { main(); } public static void main() { System.out.println(“Hello world”); } } $ javac A.java && java A Hello world Exception in thread […]