Java BlockingQueue take()vs poll()

在无限循环中使用队列中的值时 – 更有效: 1)阻止队列,直到通过take()获得值 while (value = queue.take()) { doSomething(value); } 2)睡眠n毫秒并检查物品是否可用 while (true) { if ((value = queue.poll()) != null) { doSomething(value); } Thread.sleep(1000); }

在Java中从String创建实例

如果我有2个类,“A”和“B”,我怎么能创建一个通用工厂,所以我只需要将类名作为字符串传递给接收实例? 例: public static void factory(String name) { // An example of an implmentation I would need, this obviously doesn’t work return new name.CreateClass(); } 谢谢! 乔尔

编码对象时未使用MongoDB BSON编解码器

我正在尝试将对象存储在MongoDB数据库中(使用MongoDB 3.0.2)并在尝试使用错误消息对对象进行编码时收到CodecConfigurationException Can’t find a codec for class java.time.LocalDate. 我已经编写并包含了LocalDate对象的编解码器。 细节如下。 我试图存储的对象DutyBlock具有以下成员变量: public class DutyBlock { private LocalDate startDate; private LocalDate endDate; //Inclusive private int blockLength; private double pointValue; private ArrayList assigned; } 我编写了以下编解码器来编码数据库中的DutyBlock对象: public class DutyBlockCodec implements Codec { @Override public void encode(BsonWriter writer, DutyBlock t, EncoderContext ec) { Document document = new Document(); […]

如何在Java中将数字转换为字母?

是否有更好的方法将数字转换为字母等价物? private String getCharForNumber(int i) { char[] alphabet = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”.toCharArray(); if (i > 25) { return null; } return Character.toString(alphabet[i]); } 也许还可以处理超过26的数字呢?

如何将DataSource绑定到InitialContext以进行JUnit测试?

我正在尝试对数据库“worker”类运行JUnit测试,这些类在InitialContext上执行jndi查找以获取DataSource 。 工作类通常在Glassfish v3 App Server上运行,该服务器定义了适当的jdbc资源。 代码在App Server上部署时运行得很好,但是没有从JUnit测试环境运行,因为很明显它找不到jndi资源。 所以我尝试在测试类中设置一个InitialContext,它将数据源绑定到适当的上下文,但它不起作用。 这是我在测试中的代码 @BeforeClass public static void setUpClass() throws Exception { try { // Create initial context System.setProperty(Context.INITIAL_CONTEXT_FACTORY, “org.apache.naming.java.javaURLContextFactory”); System.setProperty(Context.URL_PKG_PREFIXES, “org.apache.naming”); InitialContext ic = new InitialContext(); ic.createSubcontext(“java:”); ic.createSubcontext(“java:/comp”); ic.createSubcontext(“java:/comp/env”); ic.createSubcontext(“java:/comp/env/jdbc”); // Construct DataSource SQLServerConnectionPoolDataSource testDS = new SQLServerConnectionPoolDataSource(); testDS.setServerName(“sqlserveraddress”); testDS.setPortNumber(1433); testDS.setDatabaseName(“dbname”); testDS.setUser(“username”); testDS.setPassword(“password”); ic.bind(“java:/comp/env/jdbc/TestDS”, testDS); DataWorker dw = […]

Java WebDAV客户端库

您可以推荐哪些Java WebDAV客户端库?

Spring Boot OAuth2单点注销(注销)

我正在考虑将OAuth2用于我的应用程序。 我想要实现的架构如下: 我将拥有自己的(也是唯一一个)授权服务器 某些资源应用程序使用授权服务器validation对其资源的访问 一些客户端应用程序(Web,移动)将用户重定向到授权服务器进行身份validation并成功将消耗资源应用程序上的api。 到目前为止,我已设法在3个基本应用程序(1个auth服务器,1个资源服务器和1个客户端)之间实现此交互。 我没有工作的是注销function。 我已经读过Dave Syer在他的教程中描述的“臭名昭着的棘手问题” ,但在这种情况下我真的需要用户在注销后重新登录。 我已经尝试给访问令牌和刷新令牌提供几秒钟,但是当到期时,我没有被提示再次登录,而是在客户端应用程序上获得NPE。 我也尝试过这篇文章中提出的解决方案来从令牌存储中删除令牌,但它不起作用。 单点注销对我来说是这种实现的理想行为。 如何使用Spring Boot Oauth2实现此目的。 如果由于某种原因不可能,我可以使用哪些替代方法来实现使用Spring Boot的集中安全性? 提前致谢。

为什么在添加HashSet和hashCode匹配时没有调用equals()?

当我运行此代码时,为什么只调用hashCode()而不是equals方法,而我的hashCode()实现为两个HashSet条目生成相同的hashCode ? import java.util.HashSet; public class Test1 { public static void main(String[] args) { Student st=new Student(89); HashSet st1=new HashSet(); st1.add(st); st1.add(st); System.out.println(“Ho size=”+st1.size()); } } class Student{ private int name; private int ID; public Student(int iD) { super(); this.ID = iD; } @Override public int hashCode() { System.out.println(“Hello-hashcode”); return ID; } @Override public boolean […]

如何禁用Jetty的WebAppContext的目录列表?

我将Jetty(版本7.4.5.v20110725)嵌入到java应用程序中。 我使用Jetty的WebAppContext在./webapps/jsp/中提供JSP页面,但是如果我访问localhost:8080 / jsp /我获取Jetty的目录列表以获取./webapps/jsp/的全部内容。 我已经尝试在WebAppContext上将dirAllowed参数设置为false,并且它不会更改目录列表行为。 在ResourceHandler上禁用目录列表就是将false传递给setDirectoriesListed,按预期工作。 有人可以告诉我如何为WebAppContext执行此操作吗? import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.ResourceHandler; import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.webapp.WebAppContext; public class Test { public static void main(String[] args) throws Exception { Server server = new Server(); SelectChannelConnector connector = new SelectChannelConnector(); connector.setHost(“127.0.0.1”); connector.setPort(8080); server.addConnector(connector); // Create a resource […]

Java – 具有水平滚动的垂直“FlowLayout”

正如标题中所描述的那样,我一直试图设置一种带有水平滚动的垂直流布局。 布局中的组件将是JLabel。 让我画一幅画: +————————-+ <— window |Label1 Label4 Label7| |Label2 Label5 Label8| <— labels |Label3 Label6 Label9| |========| <— scrollbar +————————-+ 同一窗口,垂直扩展 +————————–+ <— window |Label1 Label5 Label9 | |Label2 Label6 Label10| <— labels |Label3 Label7 Label11| |Label4 Label8 Label12| |=====| <— scrollbar +————————–+ 因此,标签将填充可用的垂直空间,然后创建一个新列。 一旦可用的水平空间耗尽,就会出现水平滚动条。 通常不应出现垂直滚动条; 但是,如果窗口的垂直高度非常小,那么有一个垂直滚动条会很不错。 任何帮助是极大的赞赏。 我是Java的新手,所以任何额外的解释都会很精彩。 谢谢! 编辑: 根据以下回复,我现在正在使用: http : […]