我在JTable(JDK 1.5_22)中遇到了一个奇怪的行为:
在表中选择更改并且在某些未知的特定情况下,JTable将使用'null'为value参数调用单元格渲染器.
这最终将在自定义渲染器代码上导致一个不错的"空指针异常",而这些代码还没有为这种粗鲁的调用做好准备.
这是有罪的方法(JTable.java,第5319行):
public Accessible getAccessibleChild(int i) {
if (i < 0 || i >= getAccessibleChildrenCount()) {
return null;
} else {
// children increase across, and then down, for tables
// (arbitrary decision)
int column = getAccessibleColumnAtIndex(i);
int row = getAccessibleRowAtIndex(i);
TableColumn aColumn = getColumnModel().getColumn(column);
TableCellRenderer renderer = aColumn.getCellRenderer();
if (renderer == null) {
Class<?> columnClass = getColumnClass(column);
renderer = getDefaultRenderer(columnClass);
}
Component component = renderer.getTableCellRendererComponent(
JTable.this, null, false, false,
row, column);
return new AccessibleJTableCell(JTable.this, row, column, …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的JTree:
MasterRoot
+-RootA
+-ChildA1
+-GrandChildA1a
+-RootB
+-ChildB1
+-GrandChildB1a
Run Code Online (Sandbox Code Playgroud)
我不希望显示MasterRoot节点但是如果我调用`configTree.setRootVisible(false);
我有:
RootA
+-ChildA1
+-GrandChildA1a
RootB
+-ChildB1
+-GrandChildB1a
Run Code Online (Sandbox Code Playgroud)
我想要这个:
+-RootA
+-ChildA1
+-GrandChildA1a
+-RootB
+-ChildB1
+-GrandChildB1a
Run Code Online (Sandbox Code Playgroud)
注意:是的,我只需要在主根之后显示到我的第一级节点的'+ - '(名称是什么?节点处理程序??).
我有一个包含许多相关表的模式.一个视图让我将所有这些表聚集在一个易于处理我的应用程序的大表中.
现在我需要为应用程序提供略微不同的视图:还有一个与present相关的关系,一些额外的列,
A very simplified example: the real one has many fields and tables related
Base request:
select T1.C1, T2.C2
from T1, T2
where ...
Specialized request A:
select T1.C1, T2.C2, T2.C3, T4.C4
from T1, T2, T4
where ...
Specialized request B:
select T1.C1, T2.C2, T2.C3, T5.C5
from T1, T2, T5
where ...
Run Code Online (Sandbox Code Playgroud)
您认为创建第一个视图'base_view'然后重用此视图来创建view_A和view_B是一个好主意(在维护和性能方面)吗?
我想在Groovy中使用一个映射,其中键将是不可变类的实例.
这是我经常用Java做的事情,它工作正常,就像在这个示例类中一样:
public class TestMap {
static final class Point {
final int x; final int y;
public Point(int x, int y) {this.x = x;this.y = y;}
}
public static void main(String[] args) {
Map<Point, String> map = new HashMap<>();
final Point origin = new Point(0, 0);
map.put(origin, "hello world !" );
if(!map.containsKey(origin))
throw new RuntimeException("can't find key origin in the map");
if(!map.containsKey(new Point(0,0))) {
throw new RuntimeException("can't find new key(0,0) in the map");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试用Groovy实现同样的功能时,它不起作用.为什么?以下是Groovy中的一个非工作示例示例:
class Point …Run Code Online (Sandbox Code Playgroud) 我需要将拉丁语ISO-8859-1字符编码为UTF-8(以及相反的操作).
我第一次使用这个答案有没有办法从UTF8转换为iso-8859-1?执行操作,它的工作原理;
现在我想使用提供所有转换机制的libiconv,并且应该帮助我保持代码更简单.
我按照这里提供的示例: https://www.lemoda.net/c/iconv-example/iconv-example.html
我写了一个看起来像这样的方法:
char *iconvISO2UTF8(char *iso) {
iconv_t iconvDesc = iconv_open ("ISO?8859-1", "UTF-8//TRANSLIT//IGNORE");
if (iconvDesc == (iconv_t) - 1) {
/* Something went wrong. */
if (errno == EINVAL)
fprintf(stderr, "conversion from '%s' to '%s' not available", "ISO?8859?1", "UTF-8");
else
fprintf(stderr, "LibIcon initialization failure");
return NULL;
}
size_t iconv_value;
char * utf8;
size_t len;
size_t utf8len;
char * utf8start;
int len_start;
len = strlen (iso);
if (! len) {
fprintf(stderr, "iconvISO2UTF8: input String is empty."); …Run Code Online (Sandbox Code Playgroud)