在执行另一个java应用程序时,是否可以创建java小程序

在执行另一个java应用程序时,是否可以创建java小程序,java,applet,jung,Java,Applet,Jung,我一直在开发一个Java应用程序,它执行一系列的查询和计算,并将结果显示为一系列HTML页面。对于可视化图形,我已经使用JUNG library玩了一段时间,它的真正优势似乎是支持用户交互,当图形保存为静态图像(在我的例子中为PNG)时,这当然是不可用的 我想知道是不是: a) 可能的 b) 可行的 c) 明智的 。。。要在主应用程序执行期间创建小程序,可以将其插入HTML报告,并在应用程序完成执行和用户浏览报告页面后以交互方式使用 如果由于技术原因无法实现;关于我如何实现这样的目标,你有其他的

我一直在开发一个Java应用程序,它执行一系列的查询和计算,并将结果显示为一系列HTML页面。对于可视化图形,我已经使用JUNG library玩了一段时间,它的真正优势似乎是支持用户交互,当图形保存为静态图像(在我的例子中为PNG)时,这当然是不可用的

我想知道是不是:

a) 可能的

b) 可行的

c) 明智的

。。。要在主应用程序执行期间创建小程序,可以将其插入HTML报告,并在应用程序完成执行和用户浏览报告页面后以交互方式使用

如果由于技术原因无法实现;关于我如何实现这样的目标,你有其他的建议吗

谢谢

编辑:为了澄清这个概念,“主”应用程序是事件链中的一个链接,因此具有如此独立的GUI。小程序的想法不是模仿或将所有内容从主应用程序传输到HTML页面,而是当用户在主软件执行完成后查看图形结果时,使用JUNG library附带的交互式工具

如果这个概念还不清楚,请告诉我,我将再次尝试更详细地解释

更新:根据我得到的建议,我编写了我的小程序,并将其与其他可视化相关类一起放入项目的一个包中。层次结构如下:

my.domain.project
my.domain.project.tests
my.domain.project.visualization
现在HTML报告是在本地驱动器上的任意位置创建的,这是一项功能,因为用户在运行“main”应用程序之前会给出一个输出文件夹。在我的
ReportGenerator
类(生成这些HTML文件)中,我有以下代码:

File bin = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toString());
String codebase = bin.getParent();
System.out.println(codebase);
String archive = "lib/collections-generic-4.01/collections-generic-4.01.jar";
String applet_name = "bin/my.domain.project.visualization.HierarchyGraphApplet.class";
codebase
打印输出显示:
文件:/home/username/workspace/project
,这正是我所期望的。在项目文件夹下有bin/和lib/,在bin中有文件夹的正确层次结构,一直到我的applet类,它也存在

我为什么要写下这一切;因为当我尝试在我得到的报告上运行applet时:

java.lang.NoClassDefFoundError: bin/my/domain/project/visualization/HierarchyGraphApplet (wrong name: my/domain/project/visualization/HierarchyGraphApplet)
我读过类似的问题,比如:或者,但问题似乎出在其他地方。我仔细检查了拼写等。。。
是我缺少了一些简单的东西,还是手头有一个更复杂的问题

创建一个小程序来显示数据是绝对可行的,但您不希望每次都动态生成一个新的小程序。您想创建一个独立的小程序,它可以从一组文本格式的输入数据生成图形/报告,然后在创建HTML页面时,使用小程序参数(使用PARAM标记)提供报告数据。

也许这个示例会给您一些想法。它创建用作“报告”的数据文件,供小程序使用

因为小程序通过一个输入文件获取数据,该文件的标题在小程序
param
中指定。数据文件的内容仅受报告要求、您创建和解析数据文件的技能以及可用磁盘空间的限制。;)

编译并运行
main(String[])
以(希望)看到在浏览器的选项卡中打开的两个网页

import java.awt.Desktop;
import javax.swing.*;
import java.net.*;
import java.io.*;

/** Simplistic example, not intended to show good I/O practices
or Exception handling for the sake of brevity. */
public class Reporter extends JApplet {

    public void init() {
        String input = getParameter("input");

        JEditorPane report = new JEditorPane();
        report.setText("Problem loading input file");
        add(report);

        URL url;
        try {
            url = new URL(getDocumentBase(), input);
            report.setPage(url);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    /** The main represents our report generator.  It is part
    of the applet class only in order to create an SSCCE. Good
    design would imply that it might be in a class ReportGenerator,
    while the applet is in class ReportViewer. */
    public static void main(String[] args) throws Exception {
        File f;
        String title = "1";
        String data = "apples";

        createInput(title, data);
        f = createHTML(title);
        Desktop.getDesktop().browse(f.toURI());

        title = "2";
        data = "oranges";

        createInput(title, data);
        f = createHTML(title);
        Desktop.getDesktop().browse(f.toURI());

        System.out.println( "End of report generation.." );
    }

    public static void createInput(String title, String data) throws Exception {
        File f = new File("data" + title + ".txt");
        PrintWriter pw = new PrintWriter(f);
        pw.println(data);

        pw.flush();
        pw.close();
    }

    public static File createHTML(String title) throws Exception {
        File f = new File("Data" + title + ".html");
        PrintWriter pw = new PrintWriter(f);

        pw.println("<html>");
        pw.println("<title>");
        pw.println("Data " + title);
        pw.println("<title>");
        pw.println("<body>");
        pw.println("<h1>");
        pw.println("Data " + title);
        pw.println("</h1>");
        pw.println("<applet ");
        pw.println("code='Reporter'");
        pw.println("width='400'");
        pw.println("height='400'");
        pw.println(">");
        pw.println("<param name='input' value='data" + title + ".txt'>");
        pw.println("</applet>");
        pw.println("</body>");
        pw.println("</html>");

        pw.flush();
        pw.close();

        return f;
    }
}
导入java.awt.Desktop;
导入javax.swing.*;
导入java.net。*;
导入java.io.*;
/**简单的示例,不打算展示良好的I/O实践
或者为了简洁起见进行异常处理*/
公开课记者{
公共void init(){
字符串输入=getParameter(“输入”);
JEditorPane报告=新的JEditorPane();
report.setText(“加载输入文件时出现问题”);
增加(报告);
网址;
试一试{
url=新url(getDocumentBase(),输入);
report.setPage(url);
}捕获(例外e){
e、 printStackTrace();
}
}
/**main代表我们的报表生成器。它是
只有在创建SSCCE时才使用applet类。很好
设计意味着它可能在类ReportGenerator中,
当小程序在ReportViewer类中时*/
公共静态void main(字符串[]args)引发异常{
文件f;
字符串title=“1”;
字符串数据=“苹果”;
createInput(标题、数据);
f=创建HTML(标题);
Desktop.getDesktop().browse(f.toURI());
title=“2”;
data=“橙子”;
createInput(标题、数据);
f=创建HTML(标题);
Desktop.getDesktop().browse(f.toURI());
System.out.println(“报告生成结束”);
}
公共静态void createInput(字符串标题、字符串数据)引发异常{
文件f=新文件(“数据”+标题+“.txt”);
PrintWriter pw=新的PrintWriter(f);
pw.println(数据);
pw.flush();
关闭();
}
公共静态文件createHTML(字符串标题)引发异常{
文件f=新文件(“数据”+标题+”.html”);
PrintWriter pw=新的PrintWriter(f);
pw.println(“”);
pw.println(“”);
pw.println(“数据”+标题);
pw.println(“”);
pw.println(“”);
pw.println(“”);
pw.println(“数据”+标题);
pw.println(“”);
pw.println(“”);
pw.println(“”);
pw.println(“”);
pw.println(“”);
pw.println(“”);
pw.flush();
关闭();
返回f;
}
}

关于进一步的问题:

…给定的代码是否假定html报告和小程序位于同一文件夹中

不一定。
输入
参数mi