我试图定期更新按钮的字体,这就是我实现它的方式。
Font font = buttons.getFont();
FontData[] fontData = font.getFontData();
for(int j = 0; j < fontData.length; ++j) {
fontData.setStyle(SWT.ITALIC | SWT.BOLD);
}
font = new Font(display, fontData);
buttons.setFont(font);
但这样做会使程序在一段时间后崩溃并出现异常
org.eclipse.swt.SWTError:没有更多句柄了 在org.eclipse.swt.SWT.error(SWT.java:4387) 在org.eclipse.swt.SWT.error(SWT.java:4276) 在org.eclipse.swt.SWT.error(SWT.java:4247) 在org.eclipse.swt.widgets.Display.error(Display.java:1258) 在org.eclipse.swt.widgets.Display.internal_new_GC(Display.java:2673) 在org.eclipse.swt.graphics.Device.computePoints(Device.java:241) 在org.eclipse.swt.graphics.Font.getFontData(Font.java:188)
我的猜测是我创建了很多字体对象而没有及时处理它们。但我不知道如何正确处理它们,任何人都可以帮助我吗?如果我猜错了,请告诉我no handle
例外的真正原因是什么?
答案 0 :(得分:1)
尝试在按钮上使用getFont()。dispose()和setFont(),
final Font arialFont = new Font(Display.getCurrent(), "Arial", 40,
SWT.NORMAL);
final Font courierFont = new Font(Display.getCurrent(), "Courier New",
8, SWT.NORMAL);
final Button btn = new Button(parent, SWT.NONE);
btn.setText("New Text");
btn.setSize(100, 30);
btn.setFont(arialFont);
Button changeBtn = new Button(parent, SWT.NONE);
changeBtn.setText("Change Font");
changeBtn.setSize(100, 30);
changeBtn.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent arg0) {
count = count + 1;
if (count % 2 == 0) {
btn.getFont().dispose();
btn.setFont(arialFont);
} else {
btn.getFont().dispose();
btn.setFont(courierFont);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
// TODO Auto-generated method stub
}
});