小编pyt*_*ude的帖子

SWT:包含跨列的单元格的表

在具有基于SWT的GUI的Java桌面应用程序中,我们有一个表,其中某些行必须跨越多个列.这是通过此官方SWT Snippet:Snippet239.java中显示的方法解决的

然而,很久以后发现这种方法在Ubuntu上存在一个主要问题,默认的Ambiance/Radiance主题:列之间总是有垂直线,即使是跨越多列的单元格也是如此.这将在以下屏幕截图中显示:

Ubuntu采用Ambiance/Radiance主题

Ubuntu与Clearlooks主题

如您所见,在第一个屏幕截图中,第1列和第2列之间有一条垂直线.是否有人知道如何摆脱这些线?

我们已经尝试过以下方法:

  • Table.setLinesVisible(false):不起作用,垂直线不会消失.
  • 使用基于所有者绘制的标签提供程序绘制这些垂直线:不起作用,垂直线似乎绘制在标签提供者绘制的所有内容之上.
  • 将绘图侦听器附加到表以绘制垂直线:不起作用,因为每当滚动或以其他方式更新表时都会有很多毛刺.
  • 星云的项目有一个网格小部件,其中的细胞可以跨越多个列,并且它不与垂直线的问题,因为整个表绘制非本地.但是,我们无法证明用Grid小部件替换我们的表只是为了修复具有特定主题的特定平台上的垂直线问题.此外,Grid小部件似乎是一个预发布的alpha版本.

根据我们已经尝试过的事情,我认为剩下的唯一方法就是在特定于平台的SWT内部进行处理,但我甚至不知道从哪里开始这样的事情.

java ubuntu swt

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

动态选择端口号?

在Java中,我需要获取一个端口号,以便在同一程序的多个实例之间进行通信.现在,我可以简单地选择一些固定数字并继续使用它.但我想知道是否有一种方法可以动态选择端口号,这样我就不必为设置端口号而烦扰我的用户.

这是我的一个想法,它的工作原理如下:

  • 有一个固定的初始端口号A.
  • 程序'MyApp'启动,试图抓住端口A.
  • 如果成功,那么它就是'MyApp'的第一个实例.完成.
  • 如果失败,它会通过端口A询问A上的程序是否是"MyApp"的实例.如果是,请与该实例通信.完成.如果没有,请尝试抓住端口A + 1.如果有另一个程序使用该端口(也不是'MyApp'的实例),则抓A + 2,然后抓A + 3,依此类推.

这种策略有意义吗?或者有更好的方法来动态选择端口号吗?

java tcp

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

如果找不到元素,为什么Scala的索引方法返回-1而不是None?

我一直想知道为什么在斯卡拉来确定某种元素的位置的集合中(例如各种索引方法List.indexOf,List.indexWhere)返回-1指示,而不是更地道缺乏集合中的给定元素的,Option[Int].有一些特别的优势,以返回-1代替None,或者这只是由于历史的原因?

scala

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

您使用哪些数据挖掘工具?

除了两个着名的开源工具RapidMiner和Weka之外,还有其他好的工具(开源或商业),您可以推荐用于数据挖掘吗?

提前致谢!

open-source data-mining

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

私人使用的Google App Engine?

是否可以在Google App Engine上创建只能由单个用户访问的Web应用程序?我正在考虑一个简单的任务管理应用程序供私人使用.

是的,我已经在GAE文档上查了一下,但我真的不明白他们基于域的身份验证系统的含义.

google-app-engine

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

Java SWT:在异常处理程序中包装主循环?

您可能知道,标准SWT主循环如下所示:

Display display = new Display();
Shell shell = new Shell(display);
...
shell.open();
while (!shell.isDisposed()) {
  if (!display.readAndDispatch()) {
    display.sleep();
  }
}
display.dispose();
Run Code Online (Sandbox Code Playgroud)

最近,我与一位同事争论是否将主循环包装在try-catch中是有意义的,如下所示:

Display display = new Display();
Shell shell = new Shell(display);
...
shell.open();
while (!shell.isDisposed()) {
  try {
    if (!display.readAndDispatch()) {
      display.sleep();
    }
  } catch (RuntimeException e) {
    // TODO Implement exception handler
  }
}
display.dispose();
Run Code Online (Sandbox Code Playgroud)

我的同事说这样做,如果GUI线程发生崩溃,你不必立即关闭应用程序,因此用户可能有机会在关闭程序之前保存他的数据.

所以你怎么看?做这样的事情有意义吗?

java swt

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

g ++:如何解码导出的符号

我正在尝试编译一个使用JNI的Java库.当我启动程序时,我看到一个带有UnsatisfiedLinkError的崩溃,它表示在DLL中找不到特定的方法.

仔细观察后,我发现用于编译和链接的g ++通过在方法名称中添加诸如"@ 8"或"@ 16"的后缀来破坏我的方法名称.有没有人知道正确的编译器选项来禁用名称修改?提前致谢!

编辑:我通过Eclipse + CDT插件使用MinGW.

java java-native-interface g++ name-mangling

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

特殊Java注释标记的完整列表

我刚刚发现我可以在公共静态最终字段的注释中写"{@value}",以将实际字段值插入注释中.例:

/** The value of this field is {@value}. */
public static final int someField = 3
Run Code Online (Sandbox Code Playgroud)

在Eclipse中,此注释显示为"此字段的值为3".另一个技巧是编写"{@code some-code}"以便将代码插入注释中.

某处有这些特殊评论标签的完整列表吗?我找不到一个......

java comments

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

IMAP UID的可靠性如何?

我正在编写一个IMAP抓取工具,它是开源应用程序的一部分,对于增量抓取,我想使用消息UID来查明我是否已经看过某个特定消息.

现在我发现2007年的一篇帖子说IMAP UID并不总是可靠的.更具体地说,如果设置了标志UIDNOTSTICKY,则不能假设UID始终相同.所以我的问题是,我是否必须严肃对待案例UIDNOTSTICKY = true,或者IMAP服务器是否具有非粘性UID遗留物并且不再(广泛使用)?

imap web-crawler uid

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

Java:Override注释在现代IDE中是否无效?

它只是我,还是Java的Override注释在一个体面的IDE中编程时实际上没用?

是的,我知道Override注释可以防止我意外地通过拼写方法名称或弄乱方法参数来覆盖超级方法.但是,常识告诉我这在现代IDE中不太可能发生,原因如下:

  • IDE在编辑器左侧显示一个标记(即一个小图标),指示该方法是否被覆盖/覆盖.因此,不需要显式覆盖注释来显示覆盖意图.
  • 如果我要重命名一个方法并且我看到这样的覆盖标记,我永远不会直接编辑方法名称 - 我本能地伸手去拿打开IDE重命名助手的键盘快捷键.同样,如果我打算更改方法签名并且我看到覆盖标记,我本能地使用IDE的方法签名助手而不是手工完成(除了非常简单的情况).因此,方法名称和签名几乎总是正确地更改,因此添加覆盖注释(在我看来)只不过是一种偏执和无用的安全检查 - 就像在整个地方传播'最终'一样.

当然,如果你必须在记事本或其他任何东西编写Java代码,覆盖注释显然会有所帮助.但我的观点是,在现代IDE中,这种注释提供的安全性增加不值得降低可读性.任何意见?

java overriding

4
推荐指数
2
解决办法
556
查看次数