小编Aha*_*med的帖子

将日期字段格式化为XStream中的字符串

我有一个日期字段,当使用XStream转换为xml 时,以毫秒和区域给出时间.我只需将其转换或格式化为"MMMM dd, yyyy HH:mm:ss".如何使用XStream做到这一点?我不想改变吸气剂和制定者.谢谢.

我的课:

    public class Datas {
    private String name;
    private Calendar dob;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Calendar getDob() {
        return dob;
    }

    public void setDob(Calendar dob) {
        this.dob = dob;
    }

    public static void main(String[] args) {
        Datas datas = new Datas();
        datas.setName("Ahamed");
        datas.setDob(Calendar.getInstance());
        XStream stream = new XStream();
        System.out.println(stream.toXML(datas));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

<Datas>
  <name>Ahamed</name>
  <dob>
    <time>1329081818801</time>
    <timezone>Asia/Calcutta</timezone>
  </dob> …
Run Code Online (Sandbox Code Playgroud)

java format date xstream

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

带有wait()和notify()的ConcurrentLinkedQueue

我并不精通多线程.我试图通过一个生产者线程重复截取屏幕截图,该线程将BufferedImage对象添加到,ConcurrentLinkedQueue并且消费者线程将为对象poll排队BufferedImage以将它们保存在文件中.我可以通过重复轮询(while循环)来消耗它们,但我不知道如何使用notify()和消耗它们wait().我曾尝试使用wait(),并notify在较小的项目,但不能在这里实现它.

我有以下代码:

class StartPeriodicTask implements Runnable {
    public synchronized void run() {
        Robot robot = null;
        try {
            robot = new Robot();
        } catch (AWTException e1) {
            e1.printStackTrace();
        }
        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit()
                .getScreenSize());
        BufferedImage image = robot.createScreenCapture(screenRect);
        if(null!=queue.peek()){
            try {
                System.out.println("Empty queue, so waiting....");
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }else{
            queue.add(image);
            notify();
        }
    }
}

public class ImageConsumer implements …
Run Code Online (Sandbox Code Playgroud)

java concurrency notify wait java.util.concurrent

5
推荐指数
2
解决办法
5340
查看次数

双色JComboBox文字

In Swing有没有办法让单一选项有两种颜色?我的意思是,如果我有一个option,说Show only cities [Alt+C]JComboBox,我想Show only cities在一个颜色和文字[Alt+C]的另一种颜色(热键).同样,我有JList,其中包含一个字符串项列表.我希望通过颜色区分彼此.

简而言之,

  1. 如何设计两个彩色JComboBox选项.
  2. 如何JList用颜色区分对象.

谢谢.

html java swing renderer jcombobox

5
推荐指数
1
解决办法
735
查看次数

PeriodFormatter - 如果小时或分钟恰好是一位数字,如何预置0?

当我使用PeriodFormatter如下

PeriodFormatter formatter = new PeriodFormatterBuilder().appendHours()
                .appendLiteral(":").appendMinutes().appendLiteral(":")
                .appendSeconds().toFormatter();
Run Code Online (Sandbox Code Playgroud)

我得到了输出,4:39:9这意味着4小时39分钟和9秒.

如何修改格式化程序来生成04:39:09?谢谢

java formatting period jodatime

4
推荐指数
1
解决办法
2061
查看次数

为什么我们不能创建Collections类的实例(不是Collection Interface)?

Collections是一个公共类,然后我们可以调用它的隐式默认构造函数.它没有私有构造函数,它会阻止对象创建或强制使用静态工厂方法.当我实例化为new Collections(),我得到错误为"构造函数不可见".总之为什么我们不能有java.util.Collections班级的实例?谢谢.

java collections

3
推荐指数
1
解决办法
2096
查看次数

识别Swing应用程序的不活动

我想实现会话超时类的东西JFrame.我的Swing应用程序具有登录身份验证,但在一段时间不活动后没有失效.我有一种方法(想法)这样做,比如检查最后两个连续事件(键或鼠标)的时间戳.我认为必须有一种优雅的方式来实现这一目标.

有没有其他方法这样做?

java swing session-timeout

2
推荐指数
1
解决办法
1627
查看次数

如何确定BufferedOutputStream的write方法的缓冲区大小

我正在尝试使用以下代码复制文件:

1:

        int data=0;
        byte[] buffer = new byte[4096];
        while((data = bufferedInputStream.read())!=-1){
            bufferedOutputStream.write(data);
        }
Run Code Online (Sandbox Code Playgroud)

2:

        byte[] buffer = new byte[4096];
        while(bufferedInputStream.read(buffer)!=-1){
            bufferedOutputStream.write(buffer);
        }
Run Code Online (Sandbox Code Playgroud)

文件的实际大小为3892028字节(在Windows上).该文件将由用户thro struts2 fileupload上传.上传的文件大小与Windows完全相同.当我尝试从临时文件夹复制上传的文件时,复制的文件大小不一,所用时间也各不相同(可忽略不计).请查看以下读物.

Without using buffer(Code 1)
Time taken 77
3892028
3891200

Buffer size 1024(Code 2)
Time taken 17
3892028
3891200

Buffer size 4096(Code 2)
Time taken 18
3892028
3891200

Buffer size 10240(Code 2)
Time taken 14
3892028
3901440

Buffer size 102400(Code 2)
Time taken 9
3892028
3993600
Run Code Online (Sandbox Code Playgroud)

如果我进一步增加缓冲区大小,则所花费的时间会增加,也可以忽略不计.所以我的问题是,

  1. 为什么文件大小会改变?
  2. 这种尺寸变化会导致任何微妙的后果吗?
  3. 完成此功能的最佳方法是什么(复制文件)?

我不知道下面会发生什么?谢谢你的任何建议. 编辑:我有flush()和close()方法调用. 注意:我修剪了我的代码以使其更简单.

java buffer copy file

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

不可预知的双倍

可能重复:
.NET上的双精度问题
Double计算产生奇数结果

我知道双重价值的内部代表0.2是类似的0.199999.但是下面的代码仍然让我感到困惑.

码:

public static void main(String[] args) {
    double d= 0.3d;
    double f= 0.1d;
    System.out.println(d+f);
    System.out.println(d*f);
    System.out.println(d);
    System.out.println(f);
    System.out.println(d-f);
    System.out.println(d/f);
    System.out.println((d-f)*(d-f));
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

0.4
0.03
0.3
0.1
0.19999999999999998
2.9999999999999996
0.039999999999999994
Run Code Online (Sandbox Code Playgroud)

实际上发生了什么?加法,乘法顺利,但减法,除法不是.任何人都可以详细说明为什么加法与减法不同

java math double operation

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

使用按位运算符更改符号

如何使用按位运算符更改int的符号?显然我们可以使用x*=-1x/=-1.有没有最快的方法呢?

我做了一个小测试,如下所示.只是为了好奇......

public class ChangeSign {
    public static void main(String[] args) {
        int x = 198347;
        int LOOP = 1000000;
        int y;
        long start = System.nanoTime();
        for (int i = 0; i < LOOP; i++) {
            y = (~x) + 1;
        }
        long mid1 = System.nanoTime();
        for (int i = 0; i < LOOP; i++) {
            y = -x;
        }
        long mid2 = System.nanoTime();
        for (int i = 0; i < LOOP; i++) {
            y = …
Run Code Online (Sandbox Code Playgroud)

int performance bit-manipulation

1
推荐指数
2
解决办法
7318
查看次数