我在这一点上有点迷失:我尝试创建一个JTable,它能够在第一列中保存某种树(JTree?)数据结构,然后是基于其他列中的树节点的数据,如下所示图片:

该图像显示了我的JTree的结构.红线表示我需要实现的表结构.树中的每个节点应该像该表中的单行一样进行treatet等等.我希望我能够清楚地了解到我想要实现的目标.
我试过像这里讨论的那样:JTable作为一个JTree节点,这里把JTable放在JTree中,但这不符合我的需要.我还从SwingX项目中了解了JXTreeTable,但似乎很难找到任何有用的例子.此类解决方案的许多链接似乎导致(不再存在)sun网站和/或重定向到oracle网站......
如果有人可以引导我走向正确的方向和/或提供一些如何做到这一点的正常代码(右),这将是非常棒的.
任何帮助,将不胜感激 ;).
//更新1:
我做了一些测试,删除了大部分的lib并注释掉了lib特定的代码,导致了相同的行为,这让我得出结论,这个问题不是(直接)由这些lib引起的,但似乎是我的一般问题代码和/或设置.
这里的主要问题是我不明白为什么它在eclipse(即时启动,高性能等)中启动时运行完美,而同样的代码在我在eclipse之外启动它时会有所描述的问题(作为runnable JAR使用相同的JDK!).
有人可以了解可能存在的差异吗?
// END OF UPDATE 1
//原帖:
来自我在这里问到的一个较旧的问题:使用launch4j和jdk8包装.exe需要很长时间才能启动.使用jdk7开始几乎是即时的
现在我知道它与使用jdk8的launch4j无关,但它似乎是由我的应用程序中的jdk8组合的log4j引起的.这里讨论了类似的问题:创建logger时Log4j 2挂起,这里:log4j LogManager.getLogger陷入无限循环.
但是这些解决方案都不适合我.问题对我来说也有点不同.开始了:
我的应用程序的主要方法是在初始化Logger对象之前执行一些初始化操作(比如清理旧的日志文件等).打印每个步骤以通过System.out.println进行调试.这是一个简化的例子:
public class MyTestCase {
private static Logger logger;
public static void main(String[] args) throws Exception {
System.out.println("Executing MyTestCase...");
doInitstuff1();
doInitstuff2();
System.out.println("Initializing Logger...");
logger = LogManager.getLogger(MyTestCase.class.getName());
System.out.println("Init complete!");
doTheRealStuff();
}
private void doInitstuff1() {
System.out.println("Init Stuff 1...");
}
private void doInitstuff2() {
System.out.println("Init Stuff 2...");
}
private void doTheRealStuff() {
System.out.println("Launching GUI...");
}
}
Run Code Online (Sandbox Code Playgroud)
当我从Eclipse中执行代码(调试或运行配置无关紧要)时,immedeate输出(开始和结束的<1秒)是预期的:
执行MyTestCase ...
Init Stuff …
我现在有点受阻:我写了一个非常复杂的Java桌面应用程序(没有Applet/Web App!),它有自己的"用户手册".本手册包含一些HTML和JPG文件.本手册使用JEditorPane显示在我的应用程序的"帮助菜单"中.
到现在为止还挺好.只要我使用Eclipse启动Programm,这种方法就可以正常工作.只要我将部署版本创建为可运行的jar(使用launch4j将其包装到.exe中),HTML"Viewer"就无法显示用户手册(图像丢失).
我明白为什么会发生这种情况,但我不知道如何解决/规避这个问题.
我的应用程序通过getClass().getResource()加载其资源(属性文件,图标等).例子:
this.setIconImage(new ImageIcon(getClass().getResource("/images/dialog-question.png")).getImage());
stream = new BufferedInputStream(MABIUpdater.class.getResourceAsStream("/settings.properties"));
Run Code Online (Sandbox Code Playgroud)
就像我之前说的那样,这确实很有效(从Eclipse OR中启动App作为包装的可执行文件或runnable-jar.
所以我试图像这样访问我的HTML"手册":
File manual = new File(getClass().getResource("/manual/help.html").toURI());
jEditorPane.setPage(manual.toURI().toURL());
Run Code Online (Sandbox Code Playgroud)
这不起作用.通过Eclipse启动程序我看到手册但缺少图像.通过jar/exe启动它我得到一个空框架.
那么如何实现这一目标还有什么"诀窍"呢?我猜一个问题是HTML页面本身,因为它无法访问该jar中的链接图像.这是一个非常小的HTML文件示例(无法使用图像):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html lang="de">
<head>
<title>Manual</title>
</head>
<body>
<h1>Example: </h1>
<p>fubar</p>
<img style="display: block; text-align: center;" src="../manual/img/Shot01.png" width="666" height="644" border="0" alt="Bildtext">
<p><a href=\"http://www.google.com/\">blablubb</a></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我希望我的问题很明确,有人有想法;).
编辑:所有必需的HTML文件和图像都在JAR文件/类路径中.(只是为了让这个更清楚)
java ×3
swing ×2
eclipse ×1
html ×1
jar ×1
java-8 ×1
jeditorpane ×1
jtree ×1
jtreetable ×1
jxtreetable ×1
log4j2 ×1
logging ×1