Tag: java

Java中的工厂,具体对象采取不同的构造参数

我试图在Java中实现一个工厂模式。 我有一个叫圆形和三angular形的类。 问题是Shape构造函数只获取2个参数,而Circle获取3个参数,Triangle(我不会在代码部分显示,因为与Circle完全相同)。 为了更好地展示它: private interface ShapeFactory{ public Shape create(int x, int y); } private class CircleFactory implements ShapeFactory{ public Shape create(float radius, int x, int y){ //error return new Circle(radius, x,y); } } 任何想法如何克服这个问题? 我不能接收工厂内的用户input(必须从外部接收)。 谢谢!

Eclipse中闲置时的CPU使用率较高

在我的多核机器上,Eclipse使用100%到250%的CPU功率,即使在新的普通安装和空的工作空间上闲置。 实际做事情时,变得缓慢而没有反应。 我已经尝试按照以下build议设置内存设置: Eclipse随机使用100%的CPU 。 这没有帮助。 我也尝试了不同的Java版本,即OpenJDK和Oracle Java 7,以及Eclipse版本的Juno和Indigo。 我在Ubuntu 12.04 LTS上。 另一个可能与我无关的问题是,当我closuresEclipse时,Java进程仍然保持打开状态,CPU使用率超过200%,需要手动终止。

永久运行的任务的Java执行者最佳实践

我正在做一个Java项目,我需要有多个任务asynchronous运行。 我被引导相信Executor是我做这件事的最好方式,所以我对此熟悉了。 (Yay得到报酬学习!)然而,我不清楚什么是最好的方式是完成我想要做的事情。 为了争论,让我们说我有两个任务运行。 预计也不会终止,并且两者都应该在申请期限内运行。 我试图写一个主包装类,使: 如果任一任务引发exception,包装器将捕获它并重新启动任务。 如果任何一个任务运行完成,包装将通知并重新启动任务。 现在需要注意的是,这两个任务的实现都会将run()中的代码封装在一个永远不会完成的无限循环中,而try / catch块应该能够处理所有的运行时exception而不会中断循环。 我试图增加另一层确定性; 如果我或者跟随我的人做了一些愚蠢的事情,使得这些保护措施失败,并停止这项任务,那么应用程序需要做出适当的反应。 是否有一个最好的做法来解决这个问题,比我更有经验的人会推荐? FWIW,我掀起了这个testing课: public class ExecTest { private static ExecutorService executor = null; private static Future results1 = null; private static Future results2 = null; public static void main(String[] args) { executor = Executors.newFixedThreadPool(2); while(true) { try { checkTasks(); Thread.sleep(1000); } catch (Exception […]

将字符数组转换为字节数组,然后再返回

我正在寻找转换Java字符数组到一个字节数组而不创build一个中间String ,因为字符数组包含一个密码。 我查了一些方法,但他们似乎都失败了: char[] password = "password".toCharArray(); byte[] passwordBytes1 = new byte[password.length*2]; ByteBuffer.wrap(passwordBytes1).asCharBuffer().put(password); byte[] passwordBytes2 = new byte[password.length*2]; for(int i=0; i<password.length; i++) { passwordBytes2[2*i] = (byte) ((password[i]&0xFF00)>>8); passwordBytes2[2*i+1] = (byte) (password[i]&0x00FF); } String passwordAsString = new String(password); String passwordBytes1AsString = new String(passwordBytes1); String passwordBytes2AsString = new String(passwordBytes2); System.out.println(passwordAsString); System.out.println(passwordBytes1AsString); System.out.println(passwordBytes2AsString); assertTrue(passwordAsString.equals(passwordBytes1) || passwordAsString.equals(passwordBytes2)); 断言总是失败(而且,批判地说,当代码在生产中被使用时,密码被拒绝),然而打印语句打印出三次密码。 为什么passwordBytes1AsString和passwordBytes2AsString不同于passwordAsString […]

JPA什么时候设置@GeneratedValue @Id

我有一个简单的JPA实体,它使用生成的“ID”作为主键: @Entity public class Player { private long id; protected Player() { // Do nothing; id defaults to 0L } @GeneratedValue @Id public long getId() { return id; } protected void setId(final long id) { this.id = id; } // Other code } 在这种types的对象的生命周期的某个时刻,JPA必须调用setId()来logging生成的ID值。 我的问题是,这是什么时候发生的,以及说明这一点的文档在哪里 。 我查看了JPA规范,找不到明确的声明。 JPA规范说(重点补充): 托pipe实体实例是具有持久性标识的实例,当前与持久性上下文相关联。 那是不是试图说这个对象必须被pipe理来使其@Id有意义? EntityManager.persist()的文档说(强调添加)它使“一个实例pipe理和持久化”,所以这意味着@Id是由该方法设置? 或者直到你打电话给EntityTransaction.commit() ? 设置@Id对于不同的JPA提供者可能会有所不同,也可能是针对不同的生成策略。 但是,对于已经设定的生命周期中的最早点,您可以做出哪些最安全的(便携式,符合规范的)假设?

为eclipse设置Android支持包v7 – GridLayout

我一直试图这个晚上无济于事,所以我要从头开始列出我的确切步骤。 我已经通过SDKpipe理器安装了支持包。 我创build了一个新的android项目,我称之为“testinggridlayout”。 我select的构build目标是Android 2.1 API 7。 项目清单 这将是我想要能够创build网格布局的项目。 设置支持包这些是我的步骤: 右键单击我刚刚创build的项目,然后select“新build” – “Android项目” 将其命名为GridLayout并从现有源中select创build项目并浏览至: Android的软件开发工具包\演员\机器人\ SUPPORT \ V7 \网格布局 右键单击我的testinggridlayout项目,然后单击属性: 在Java Build Path下 – selectProjects选项卡,然后selectAdd。 select我的项目“GridLayout”,然后单击确定,然后确定。 在此刻 如果我进入main.xml布局手动插入此代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <GridLayout android:background="#FFFFFF" android:layout_width="wrap_content" android:layout_height="wrap_content" android:columnCount="8" android:rowCount="5" > </GridLayout> </LinearLayout> 我得到的错误: 无法find以下类: – GridLayout(修复构buildpath,编辑XML)。 如果我改变了 <GridLayout> & </GridLayout> 至 […]

Java线程转储:“等待locking”和“停车等待”之间的区别?

在Java线程转储中,您可以看到堆栈跟踪中提到的锁。 似乎有三种信息: 1: – locked <0x00002aab329f7fa0> (a java.io.BufferedInputStream) 2: – waiting to lock <0x00002aaaf4ff6fa0> (a org.alfresco.repo.lock.LockServiceImpl) 3: – parking to wait for <0x00002aaafbf70bb8> (a java.util.concurrent.SynchronousQueue$TransferStack) 1:线程已获得对象0x00002aab329f7fa0的locking。 2&3:似乎说线程正在等待所述对象的locking变为可用… 但是2和3有什么区别?

JPA和JPA2之间的差异

有没有人有JPA 1和JPA 2之间的变化列表? 我已经阅读了关于Criteria查询和其他更改,但我想要一个“有什么新的”types的参考。 谢谢

生成器模式与inheritance

我有一个随着inheritance树深化而增加复杂性的对象层次结构。 这些都不是抽象的,因此,它们的所有情况都或多或less地具有复杂性。 由于参数数量非常高,我想使用Builder模式来设置属性,而不是编写几个构造函数。 因为我需要迎合所有的排列,我的inheritance树中的叶子类将具有伸缩式构造函数。 当我在devise中遇到一些问题时,我在这里浏览了一个答案。 首先,让我给你一个简单,浅的例子来说明问题。 public class Rabbit { public String sex; public String name; public Rabbit(Builder builder) { sex = builder.sex; name = builder.name; } public static class Builder { protected String sex; protected String name; public Builder() { } public Builder sex(String sex) { this.sex = sex; return this; } public Builder […]

追查Spring的“不符合自动代理条件”的原因

当你开始搞乱Spring的自动代理的东西,你经常遇到这样的行为logging: 实现BeanPostProcessor接口的类是特殊的,所以它们被容器区别对待。 所有BeanPostProcessors及其直接引用的Bean将在启动时实例化,作为ApplicationContext的特殊启动阶段的一部分,然后所有BeanPostProcessors将以已sorting的方式注册 – 并应用于所有其他bean。 由于AOP自动代理被实现为一个BeanPostProcessor本身,所以没有BeanPostProcessors或直接引用的Bean有资格进行自动代理(因此不会有“编织”的方面)。 对于任何这样的bean,您应该看到一条信息日志消息:“Bean'foo'不适合所有BeanPostProcessors处理(例如:不适合自动代理)”。 换句话说,如果我编写自己的BeanPostProcessor,并且该类直接引用上下文中的其他Bean,那么这些引用的Bean将不具备自动代理的资格,并且会为此logging一条消息。 我的问题是跟踪直接引用的位置可能非常困难,因为“直接引用”实际上可能是一个传递依赖链,最终在应用程序上下文中占用一半的bean。 所有的spring给你的是单一的信息消息,并没有什么帮助,除了告诉你什么时候一个bean被引用到这个网页中。 我正在开发的BeanPostProcessor确实具有对其他bean的直接引用,但它是一组非常有限的引用。 尽pipe如此,根据日志消息,几乎我的上下文中的每个bean都被排除在自动代理之外,但是我无法看到依赖关系在哪里发生。 有没有人find一个更好的方法来跟踪这个呢?