小编Ben*_*Ben的帖子

Java中的整数算术与char和整数文字

有人可以向我解释为什么以下代码在Java中编译好吗?

char c = 'a' + 10;
Run Code Online (Sandbox Code Playgroud)

为什么这不等于以下,不编译?

int i = 10;
char c = 'a' + i;
Run Code Online (Sandbox Code Playgroud)

Java语言规范(第3.10.1节)规定"如果整数文字long后缀为ASCII字母L或l(ell),则为整数文字;否则为类型int(§4.2.1)." 第4.2.2节引用"数值运算符,它产生类型int或值的值long".因此,在我的理解中,添加的结果应该是一个int,不能分配给char变量c.

但是,它编译得很好(至少在Sun JDK 1.6.0版本17和Eclipse Helios中).

也许是一个人为的例子,但是它被用在我一直在教的Java入门课程中,现在我发现我并不真正理解为什么它有效.

java

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

在JUnit测试中处理System.exit(0)

我正在为现有的Java Swing应用程序实现一些测试,这样我就可以安全地重构和扩展代码而不会破坏任何东西.我开始在JUnit中进行一些单元测试,因为这似乎是最简单的入门方法,但现在我的首要任务是创建一些端到端的测试来整体运行应用程序.

我在每个测试中重新启动应用程序,方法是将每个测试方法放在一个单独的测试用例中,并使用fork="yes"Ant的junit任务中的选项.但是,我想要作为测试实现的一些用例涉及用户退出应用程序,这导致调用System.exit(0)的方法之一.这被JUnit视为错误:junit.framework.AssertionFailedError: Forked Java VM exited abnormally.

有没有办法告诉JUnit退出代码为零实际上是否正常?

java junit

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

如何在JPanel上叠加,调整大小和居中组件?

我花了一些时间在这里阅读和试验,并提出了一些方法,但还没有完成任何工作,所以我想知道更多有经验的Swing程序员会做什么.

我的应用程序的主窗口包含JPanel的自定义子类型,用于显示从数学函数计算的图像.这可能需要一些时间来计算,所以当发生这种情况时,我会在面板中间显示一条文本消息和一个进度条.我希望文本和进度条在调整面板大小时适当调整大小,可能使用面板宽度的恒定分数.

目前我有另一个包含文本和进度条的JPanel子类型,我将这个"进度面板"添加到主面板,并将其设置为在需要时可见.主面板不包含任何其他组件,但有自己的paintComponent()方法来显示从另一个类获取的BufferedImage.这有一些问题,因为它代表:

  • 进度面板在应该的时候并不总是可见,可能是因为代码中没有任何地方明确地确保它被绘制在图像的前面.
  • 进度面板始终占用应用程序面板的整个宽度.它使用主面板中的BoxLayout垂直居中,并在进度面板之前和之后使用一些垂直胶水,但我没有设法让水平工作的相同技巧,并且在任何情况下,进度面板的首选水平尺寸是不一定是对的.一种几乎可行的方法是在进度面板周围使用带有水平和垂直支柱的BorderLayout,但进度面板的大小仍然不正确,并且在调整主面板大小时需要更改支柱.

那你会怎么做?

  • 在主面板中使用不同的布局管理器?
  • 不知何故使用LayeredPane或OverlayLayout?
  • 将另一个图层添加到包含图像面板和进度面板的包含层次结构中?
  • 上面的一些组合,或其他什么?

如何调整文本大小.我是否需要在调整面板大小时显式创建新的字体,或者是否有任何方法可以更自动地执行此操作? -

java swing font-size jpanel layout-manager

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

如何避免重组文本中的隐式mailto链接?

我是Restructured Text的新手,我正在尝试编写一个文档,该文档引用名称中带有"at"符号的项目,例如"Foo @ BAR".当我使用docutils"rst2html"工具将.rst文件转换为HTML时,会将其转换为"mailto"链接.如果我使用双反引号进行逐字渲染,则会将其转换为等宽文本.如何让它以普通文本字体呈现,而不是转换为链接?

restructuredtext

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

什么是CellRendererPane?

javax.swing.CellRendererPane"插入在单元格渲染器和使用它们的组件之间"和"只是存在以阻止repaint()和invalidate()方法,否则这些方法会在配置渲染器时向上传播."

这就是JavaDoc告诉我的内容,但这是什么意思?它是如何使用的,如果会发生什么,repaint()并且invalidate()被允许,而不是传播上树?具体的例子特别受欢迎.

java swing

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