java有很多gui框架,但是什么被认为是今天的选择框架?
以下是我对不同框架的理解,如果我错了请纠正我.这是一个非常松散定义的问题集,但我仍然认为它对于任何想创建丰富的gui应用程序的人都很有价值.
是摆动的基础,它表现良好,但缺乏先进的部件.如果您打算创建丰富的应用程序,AWT可能不是可行的方法.但是对于不需要丰富用户界面的小型gui应用程序.这可能非常适合,因为它是一个久经考验的框架.
基于AWT,如前所述.在它的初期,它被认为是缓慢和错误,并导致IBM为Eclipse创建SWT.但是,使用Java 5(或6?),Swing成为构建新应用程序的首选框架.Swing有很多丰富的组件,但在某些方面仍然缺乏.一个例子是没有可以进行排序和过滤/搜索的全功能TreeTable组件.
由IBM为Eclipse创建,他们似乎认为Swing当时不适合Eclipse.它本身是相当低级的,它通过JNI使用平台的本机小部件.它根本与Swing和AWT无关.然而,他们的API有点笨重而且不直观.它们确实有一些像TreeTable这样的高级组件.(但我不认为他们支持排序和过滤开箱即用).SWT使用一些本机绑定(通过JNI?),互联网上的咆哮是这个框架不应该在今天的项目中使用.(为什么不?)
基于Swing,它的使命是为挥杆创造丰富的组件.仍在开发中.(虽然不是很活跃.)有一组非常好的组件,比如TreeTable.但据我所知,TreeTable不支持过滤和排序.但它确实支持突出显示搜索.
请注意,SwingX是组件(AFAIU),它们是现有Swing组件的扩展或组合
JGoodies数据
我一无所知的框架......它的优点和缺点是什么?Jgoodies与其他人的区别是什么?
JGoodies OTOH是关于PLAF和布局的.
Java/Oracle的最新旗舰产品.承诺成为开发富桌面或Web应用程序的事实标准.
它使用Java2D呈现UI,从而最小化Swing和AWT的(IMO,膨胀)遗产的影响.(@Augustus Thoo)
它的主要焦点似乎是RIA(富互联网应用程序),但似乎它也可以应用于桌面应用程序.而作为个人评论,看起来很有趣!我特别喜欢它是一个apache项目.
https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html
本机qt库的java包装器,用c/c ++编写.非常强大,广泛使用和接受.有很多GUI组件和易于使用的API.
所以,试着总结一下我要问的一点:
说我想用Java创建一个桌面应用程序,它涉及许多高级组件,我应该选择什么?为什么?
哪些框架应被视为已弃用,哪些框架应被视为遥远未来的框架?
什么是今天的事实标准框架,您使用哪些工具来创建Java gui应用程序?
我可能会后悔问这个,但不管怎么说都不好意思:
据说C#/ .Net有一套易于使用的组件,可以在各个方向上进行弯曲.在调查了不同的java框架之后,我似乎无法对Java说同样的话.为什么是这样?为什么java(世界上使用最广泛的编程语言)没有相同的GUI组件集?
难道只是java已经将gui组件基于更低的级别,并且可以编写我正在寻找的所有这些高级组件,但是如果不是所有的工作,你必须做很多事情吗?
我想知道我是否可以返回响应头
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)
但是我无法解释这意味着什么,任何人都可以启发我吗?
谢谢!
所以有点背景.我正在创建一个具有相当全面的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) 我想知道当前ESI模块的性能如何?我在网上看过一些关于清漆上的ESI性能实际上比实际情况慢的帖子.
说我有一个超过3500 esi包含的页面,这将如何表现?esi是为这种用途而设计的吗?
caching reverse-proxy varnish server-side-includes edge-side-includes
如何创建这样的查询如下?
获得头发颜色为棕色或黑色且眼睛颜色为蓝色或绿色的人员列表.
我问这个的原因是因为我不确定在这些查询中如何处理优先级.
例如,如果我写道:
#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?
我在golang中理解频道时遇到了一些麻烦.据我所知,通道是以给定时间间隔将数据发布到控制台的正确方法.
所以说我有一个正在做工作的goroutine,然后在我的主循环中我想每秒打印来自goroutine的数据.
这样的事情怎么编码?一个简单的例子将非常感激.
我是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原则对这种情况有何看法?你有什么看法?
再次感谢.
有没有人有负载测试ajax应用程序的经验?专门运行jQuery作为他们的JavaScript库?
Loadrunner和Neoload是在gui层上运行的两个负载测试应用程序.但是没有人支持jquery库.
至于其他负载测试工具,如jmeter,grinder和其他http层工具.他们只是不切割它,因为您需要在测试中维护应用程序逻辑.
然而,Selenium使用真正的浏览器,结合selenium网格可以选择(也可以看www.browsermob.com),但是再次在本地安装测试环境需要大量的硬件.
在分离数据模型和gui绘图机制时,是否存在被认为是最佳模式的设计模式?
所以说我有一个类Circle和一个类Square,那么我很想在这两个类中都有一个draw方法.然而,这会迫使班级根据绘图画布使用(swing,j3d,opengl等)导入各种令人讨厌的东西.
我的第一个想法是访问者模式可以通过使Square和Circle实现一个方法来解决这个问题,该方法将访问者作为输入参数并调用访问者的函数.然后我可以在访问者上有两个绘制方法,它们将Circle和Square实例作为输入参数,并相应地绘制它们.
有什么建议吗?
我使用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)