小编Bry*_*ung的帖子

什么Scala功能允许在Any上使用plus运算符?

我还在学习Scala,当我在Koans中遇到一个例子时,我无法理解它为什么会起作用:

var foo : Any = "foo"
println(foo + "bar")
Run Code Online (Sandbox Code Playgroud)

任何没有+方法

scala

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

JFrame.setExtendedState(MAXIMIZED_BOTH)是否与未修饰的框架一起使用?

以下Swing代码在我的计算机或我的同事计算机(所有Windows XP和Java 6)上无法正常运行:

public class Test {
    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);
        frame.setLayout(new FlowLayout());
        frame.add(new JButton(new AbstractAction("Maximize") {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.setExtendedState((frame.getExtendedState() & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH ? JFrame.NORMAL : JFrame.MAXIMIZED_BOTH);
            }
        }));
        frame.setUndecorated(true);
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

它最大化窗口,但不考虑窗口任务栏(它填满屏幕).如果你注释掉"frame.setUndecorated(true);" 它似乎工作正常.

Javadoc似乎暗示这应该有效.这是Java中的错误吗?它仅限于特定版本或Windows版本吗?有解决方法吗?

我看过几个解决方法,但它们似乎不完整.我不能成为第一个用Java编写自己的框架装饰的人.

编辑:下载OpenJDK并挖掘本机代码后,我发现Java正在调用win32函数SetWindowPlacement,并在某些条件下更改MINMAXINFO以获得正确的窗口大小.我认为我看到的是没有标题或边框的窗口的默认窗口行为(虽然我无法在任何地方找到记录).我发现调用JFrame.setMaximizedBounds()提供了用于改变win32 MINMAXINFO结构的边界.因此,通过改变我执行的动作并使用camickr建议的窗口大小作为我的MaximizedBounds,我会更接近:

GraphicsConfiguration graphicsConfiguration = frame.getGraphicsConfiguration();
frame.setMaximizedBounds(graphicsConfiguration.getBounds());
frame.setExtendedState((frame.getExtendedState() & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH ? JFrame.NORMAL : JFrame.MAXIMIZED_BOTH);
Run Code Online (Sandbox Code Playgroud)

现在,最大化窗口不再隐藏菜单栏.但是......现在我还有另外一个问题.我不能从辅助监视器最大化.框架刚刚消失.

我正在添加一些win32标签,希望能够让一位认识到这个问题的C++程序员.

解决方案:我显然无法回答我自己的问题,所以我只是将我的解决方案放在这里.我不得不使用Sun类,并且我没有在Windows以外的任何平台上测试它,但到目前为止,这似乎适用于多个监视器和多个任务栏配置: …

java winapi swing

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

优化JaxRS/Jackson以排除空值,空列表,数组

我们正在使用JaxRS和Jackson向我们的客户发送数据.由于客户端是Javascript,如果没有该属性的有效值(默认情况下JaxRS默认),我们实际上不需要发送空值或空数组.有没有解决的办法?

一个例子.JaxRS发送此信息:

{"prop1":[],"prop2":null,"prop3":"foo"}

我们可以在哪里得到

{"prop3":"foo"}

json jax-rs jackson

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

在C3p0中锁定订购

我试图使用c3p0在我们的应用程序中记录数据库连接的创建和销毁ConnectionCustomizer.在其中,我有一些看起来像这样的代码:

log(C3P0Registry.getPooledDataSources())
Run Code Online (Sandbox Code Playgroud)

我遇到了僵局.我发现c3p0在其库中至少有几个使用synchronized方法的对象,并且似乎没有指定它们的预期锁定顺序.当我记录连接时,我正在锁定C3P0Registry并最终PoolBackedDataSource(简单地创建数据源列表正在访问导致锁定的哈希码).

关闭连接提供程序(调用C3P0ConnectionProvider.close())会导致以相反的顺序调用锁.但是当子数据源被关闭时,我的日志记录正在被触发.结果是僵局.

看起来我在c3p0库中进行的调用都是有效的,预期的调用:

  • C3P0ConnectionProvider.close()
  • C3P0Registry.getPooledDataSources()

它似乎(除非在文档中明确说明)它应该是图书馆管理它自己的锁定策略的责任.(我不是说责怪任何人......只是为了确认我对最佳实践的理解)

我该如何处理这个问题?由于c3p0使用的是同步方法而不是更现代的机制,我无法真正测试锁.

从我的DataSource结束代码,我可以先C3P0Registry关闭锁定,然后关闭DataSource.我会猜测正确的锁定顺序,我不知道我是否觉得舒服.

我不认为我可以反转日志记录调用的锁定顺序.我需要C3P0Registry获取列表DataSources,所以我无法锁定DataSources没有先锁定C3P0Registry以获取它们的引用.

另一种解决方案当然是在c3p0的所有内容之上提供另一个更高级别的锁定.在连接池的情况下,这似乎打败了这一点.

现在,我正在回滚我的伐木.谢谢你的帮助.

java multithreading deadlock connection-pooling c3p0

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

JavaFX CSS属性和选择器的最佳参考

我正在尝试学习JavaFX 2,但是我一直在努力设计我的应用程序.我发现这个文档试图记录控件和适用于它们的css属性.我不知道它是否不完整,如果我应该使用一些未知的选择器或JavaFX的CSS支持仅仅不足以满足我的需求.

以下是几个例子:

  • 如何更改TabPane后面区域的背景颜色而不为每个其他子组件着色(是否有选择器,或者可能是属性?)
  • 如何更改未选定标签的颜色?

java javafx-2

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

带有 etags 的 s3 流(节点)

我们正在使用createReadStream()aws-sdk从节点中的S3 流式传输内容。我们想添加 etag 支持。如果我们从客户端添加“If-None-Match”标头,s3 会抛出 NotModified 作为我似乎无法处理的错误。

retrieveFile = function(req, res) {
    var s3 = new AWS.S3(); 
    var params = {
        Bucket: bucket,
        key: key
    };
    if (req.get('If-None-Match')) {
        params.IfNoneMatch = req.get('If-None-Match');
    }
    return s3.getObject(params).on('httpHeaders', function(statusCode, headers) {
        if (headers.etag) {
            res.set('etag', headers.etag);
        }
        if (headers['content-length']) {
            return res.set('content-length', headers['content-length']);
        }
    }).createReadStream().pipe(res);
};
Run Code Online (Sandbox Code Playgroud)

我试过监听流上的事件并对从 getObject 返回的请求使用回调。我可以通过这种方式获取错误消息,但是 aws-sdk 中的其他内容似乎正在终止我的进程。

/Projects/my-app/node_modules/aws-sdk/lib/request.js:31
            throw err;
            ^

NotModified: null
  at Request.extractError (/Projects/my-app/node_modules/aws-sdk/lib/services/s3.js:519:35)
  at Request.callListeners (/Projects/my-app/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
  at Request.emit (/Projects/my-app/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
  at Request.emit (/Projects/my-app/node_modules/aws-sdk/lib/request.js:673:14)
  at Request.transition …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services node.js aws-sdk aws-sdk-nodejs

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