小编net*_*ain的帖子

Java GUI框架.选择什么?Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?

java有很多gui框架,但是什么被认为是今天的选择框架?

以下是我对不同框架的理解,如果我错了请纠正我.这是一个非常松散定义的问题集,但我仍然认为它对于任何想创建丰富的gui应用程序的人都很有价值.


AWT

是摆动的基础,它表现良好,但缺乏先进的部件.如果您打算创建丰富的应用程序,AWT可能不是可行的方法.但是对于不需要丰富用户界面的小型gui应用程序.这可能非常适合,因为它是一个久经考验的框架.


摇摆

基于AWT,如前所述.在它的初期,它被认为是缓慢和错误,并导致IBM为Eclipse创建SWT.但是,使用Java 5(或6?),Swing成为构建新应用程序的首选框架.Swing有很多丰富的组件,但在某些方面仍然缺乏.一个例子是没有可以进行排序和过滤/搜索的全功能TreeTable组件.


SWT

由IBM为Eclipse创建,他们似乎认为Swing当时不适合Eclipse.它本身是相当低级的,它通过JNI使用平台的本机小部件.它根本与Swing和AWT无关.然而,他们的API有点笨重而且不直观.它们确实有一些像TreeTable这样的高级组件.(但我不认为他们支持排序和过滤开箱即用).SWT使用一些本机绑定(通过JNI?),互联网上的咆哮是这个框架不应该在今天的项目中使用.(为什么不?)


SwingX

基于Swing,它的使命是为挥杆创造丰富的组件.仍在开发中.(虽然不是很活跃.)有一组非常好的组件,比如TreeTable.但据我所知,TreeTable不支持过滤和排序.但它确实支持突出显示搜索.

请注意,SwingX是组件(AFAIU),它们是现有Swing组件的扩展或组合


JGoodies数据

我一无所知的框架......它的优点和缺点是什么?Jgoodies与其他人的区别是什么?

JGoodies OTOH是关于PLAF和布局的.


JavaFX的

Java/Oracle的最新旗舰产品.承诺成为开发富桌面或Web应用程序的事实标准.


Apache Pivot

它使用Java2D呈现UI,从而最小化Swing和AWT的(IMO,膨胀)遗产的影响.(@Augustus Thoo)

它的主要焦点似乎是RIA(富互联网应用程序),但似乎它也可以应用于桌面应用程序.而作为个人评论,看起来很有趣!我特别喜欢它是一个apache项目.

https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html


Qt Jambi

本机qt库的java包装器,用c/c ++编写.非常强大,广泛使用和接受.有很多GUI组件和易于使用的API.

http://qt-jambi.org/


所以,试着总结一下我要问的一点:

说我想用Java创建一个桌面应用程序,它涉及许多高级组件,我应该选择什么?为什么?

哪些框架应被视为已弃用,哪些框架应被视为遥远未来的框架?

什么是今天的事实标准框架,您使用哪些工具来创建Java gui应用程序?


我可能会后悔问这个,但不管怎么说都不好意思:

据说C#/ .Net有一套易于使用的组件,可以在各个方向上进行弯曲.在调查了不同的java框架之后,我似乎无法对Java说同样的话.为什么是这样?为什么java(世界上使用最广泛的编程语言)没有相同的GUI组件集?

难道只是java已经将gui组件基于更低的级别,并且可以编写我正在寻找的所有这些高级组件,但是如果不是所有的工作,你必须做很多事情吗?

java user-interface swing swt awt

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

HTTP协议是否支持响应头中的多种内容类型?

我想知道我是否可以返回响应头

Content-Type: application/json text/json 
Run Code Online (Sandbox Code Playgroud)

或者这不合法吗?

HTTP协议声明Content-Type应为mediaType,mediaType定义如下:

   media-type     = type "/" subtype *( ";" parameter )
   type           = token
   subtype        = token
Run Code Online (Sandbox Code Playgroud)

但是我无法解释这意味着什么,任何人都可以启发我吗?

谢谢!

http http-headers

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

如何使用grails创建灵活的API

所以有点背景.我正在创建一个具有相当全面的api的网站.api应该能够处理更改,所以我已经对api进行了版本化,api url相当于类似的东西/api/0.2/$apiKey/$controller/$action/$id.

我希望能够将我的控制器重用于api以及标准的html视图.解决方案首先在我的所有操作中使用withFormat块(通过在我的动作块中使用的私有函数).

我不喜欢重复的代码,因此我想集中使用格式功能.所以不是让一堆控制器和动作拥有自己的withFormat块,而是希望它是一个服务(但是,我们无法访问render()服务,是吗?),或者有一个可以渲染根据grails内容协商输出.

我当前的解决方案定义了此过滤器:

            after = { model ->
            def controller = grailsApplication.controllerClasses.find { controller ->
                controller.logicalPropertyName == controllerName
            }
            def action = applicationContext.getBean(controller.fullName).class.declaredFields.find{ field -> field.name == actionName }

            if(model && (isControllerApiRenderable(controller) || isActionApiRenderable(action))){
                switch(request.format){
                    case 'json':
                        render text:model as JSON, contentType: "application/json"
                        return false
                    case 'xml':
                        render text:model as XML, contentType: "application/xml"
                        return false
                    default:
                        render status: 406
                        return false
                }
            }
            return true
        }
Run Code Online (Sandbox Code Playgroud)

举个例子,我在控制器中要做的只是渲染xml或者json是:

@ApiRenderable
def list = {
  def collectionOfSomething …
Run Code Online (Sandbox Code Playgroud)

api grails

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

Varnish和ESI,性能如何?

我想知道当前ESI模块的性能如何?我在网上看过一些关于清漆上的ESI性能实际上比实际情况慢的帖子.

说我有一个超过3500 esi包含的页面,这将如何表现?esi是为这种用途而设计的吗?

caching reverse-proxy varnish server-side-includes edge-side-includes

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

如何使用语义mediawiki创建一系列带AND/OR的高级查询?

如何创建这样的查询如下?

获得头发颜色为棕色或黑色且眼睛颜色为蓝色或绿色的人员列表.

我问这个的原因是因为我不确定在这些查询中如何处理优先级.

例如,如果我写道:

#ask: [[Category:Person]] 
      [[Hair color::brown]] OR [[Hair color::black]] 
      [[Eye color::blue]] OR [[Eye color::green]]
Run Code Online (Sandbox Code Playgroud)

将smw分组为:((头发=棕色或黑色)和(眼睛=蓝色或绿色))

要么

将逻辑分组为:(头发=棕色或(头发=黑色,眼睛=蓝色)或眼睛=绿色)

从我最初的测试看来,似乎后者似乎是这样的情况,似乎无法创建我追求的查询.

这个功能是否缺少smw?

mediawiki semantic-mediawiki

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

golang:如何以固定的间隔打印运行goroutine的数据?

我在golang中理解频道时遇到了一些麻烦.据我所知,通道是以给定时间间隔将数据发布到控制台的正确方法.

所以说我有一个正在做工作的goroutine,然后在我的主循环中我想每秒打印来自goroutine的数据.

这样的事情怎么编码?一个简单的例子将非常感激.

go

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

REST API问题,关于如何尽可能有效地处理集合,同时仍然符合REST原则

我是REST的新手,但据我所知,我知道以下URL符合REST原则.资源的布局如下:

/user/<username>/library/book/<id>/tags
          ^         ^           ^   ^
          |---------|-----------|---|- user resource with username as a variable
                    |-----------|---|- many to one collection (books)
                                |---|- book id 
                                    |- many to one collection (tags)


GET /user/dave/library/book             //retrieves a list of books id's
GET /user/dave/library/book/1           //retrieves info on book id=1
GET /user/dave/library/book/1/tags      //retrieves tags collection (book id=1)
Run Code Online (Sandbox Code Playgroud)

但是,如何优化此示例API呢?比如说我在我的图书馆里有10K书,我想获取我图书馆里每本书的详细信息.我真的应该/library/book/<id>为每个给出的id 强制进行http调用/library/book吗?或者我应该启用多个id作为参数?/library/book/<id1>,<id2>...并且喜欢一次使用100个id进行批量提取?

REST原则对这种情况有何看法?你有什么看法?

再次感谢.

rest web-services http design-principles

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

基于jQuery加载测试ajax应用程序

有没有人有负载测试ajax应用程序的经验?专门运行jQuery作为他们的JavaScript库?

Loadrunner和Neoload是在gui层上运行的两个负载测试应用程序.但是没有人支持jquery库.

至于其他负载测试工具,如jmeter,grinder和其他http层工具.他们只是不切割它,因为您需要在测试中维护应用程序逻辑.

然而,Selenium使用真正的浏览器,结合selenium网格可以选择(也可以看www.browsermob.com),但是再次在本地安装测试环境需要大量的硬件.

testing ajax performance jquery load-testing

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

分离数据模型和gui表示的设计模式

在分离数据模型和gui绘图机制时,是否存在被认为是最佳模式的设计模式?

所以说我有一个类Circle和一个类Square,那么我很想在这两个类中都有一个draw方法.然而,这会迫使班级根据绘图画布使用(swing,j3d,opengl等)导入各种令人讨厌的东西.

我的第一个想法是访问者模式可以通过使Square和Circle实现一个方法来解决这个问题,该方法将访问者作为输入参数并调用访问者的函数.然后我可以在访问者上有两个绘制方法,它们将Circle和Square实例作为输入参数,并相应地绘制它们.

有什么建议吗?

java oop user-interface design-patterns

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

通过sshj杀死进程

我使用sshj和我试图拖尾文件,但我的问题是远程进程永远不会被杀死.

在下面的示例代码中,您可以看到我尝试tail/var/log/syslog,然后我向进程发送一个kill信号.但是,在应用程序停止并列出服务器上的所有进程后,我仍然可以看到一个活动的尾部进程.

为什么这段代码不会杀死进程?我该怎么做才能解决这个问题呢?

    SSHClient ssh = new SSHClient();
    ssh.addHostKeyVerifier(new PromiscuousVerifier());
    try {           
        ssh.connect("localhost");
        ssh.authPassword("xxx", "xxx");
        final Session session = ssh.startSession();
        try {
            final Command cmd = session.exec("tail -f /var/log/syslog");
            cmd.signal(Signal.KILL);
            System.out.println("\n** exit status: " + cmd.getExitStatus());
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            session.close();
        }
    } finally{
        ssh.disconnect();
    }
Run Code Online (Sandbox Code Playgroud)

编辑

还尝试发送所有可用信号.

            for(Signal s : Signal.values()){
                cmd.signal(s);
            }
Run Code Online (Sandbox Code Playgroud)

java ssh sshj

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