0

所以我在打开一个 JFrame 时有点麻烦。我在网上广泛搜索,但我真的找不到解决方案......

我解释了情况:

我需要开发一个应用程序,该应用程序需要在满足新安全标准的同时检索信息跟踪应用程序。为此,我使用允许监控的 JMX 和 VisualVM 来查看这些信息。

因此,自 VisualVM 以来,我毫无问题地(最近 ^ ^)连接到 JMX。

因此,VisualVM 插件中有一个用于恢复 MBean 上的信息,包括方法上的信息(插件中的操作选项卡)。这允许停止服务或创建事件等。

当我尝试显示统计结果时,我的问题就出现了。事实上,我必须通过单击“操作”中方法列表中的按钮来显示一个带有 HTML 表格的窗口(标题、颜色和其他所有内容)。

为此,我使用 JFrame:

public JFrame displayHTMLJFrame(String HTML, String title){
        JFrame fen = new JFrame();
        fen.setSize(1000, 800);
        fen.setTitle(title);

        JEditorPane pan = new JEditorPane();
        pan.setEditorKit(new HTMLEditorKit());
        pan.setEditable(false);

        pan.setText(HTML);
        fen.add(pan);
        return fen;
    }

我在我的方法中调用它:

public JFrame displayHtmlSqlStatOK_VM(){
        return displayHTMLJFrame(displaySQLStat(sqlStatOK, firstMessageDate), "SqlStatOK");
    }

因此,该方法必须将我的 JFrame 还给我,但她会产生错误:

Problem invoking displayHtmlSqlStatOK_VM : java.rmi.UnmarshalException: error unmarshalling return; nested 

exception is:
java.io.InvalidClassException: javax.swing.JFrame; local class incompatible: stream classdesc serialVersionUID = 

-5208364155946320552, local class serialVersionUID = -2386951414768123374

我在网上看到这是一个版本问题(序列化),我坚信这是因为我有这个:

服务器 - JDK5 <----> 客户端 (VisualVM) - JDK6

知道我不能像某些网站和论坛所倡导的那样更改服务器版本(成本太重要了......)。

我的问题如下:

我可以显示这个该死的窗口来保持我当前的架构(JDK5 服务器端和客户端 JDK6)吗?

我也许可以强迫这个问题?告诉他没有什么不好的东西可以运行我的代码?最后我问他,但他没有回答我,也许他会告诉你......(是的,我破解了^^)。

非常感谢那些阅读我并帮助我的人!

如果您需要更多信息,请不要犹豫。

编辑

我的问题的解决方案可能在其他地方,因为实际上我只想要一个格式最少的表格(这只是为了查看一个官员的申请,让他的小表格可能会将关键数据放在红色......)。

但是我在任何地方都找不到可以使用 VisualVM 返回的类型列表……但是在我看来,这并没有太多要求。

在我想到了一个备份解决方案之后,那就是创建一个临时的 HTML 文件并在浏览器中自动打开它,但之后可能不是很干净......但如果它可以工作 ^^

我对任何研究领域都持开放态度!

4

2 回答 2

0

看起来您正在通过 JMX 连接发送实例 javax.swing.JFrame - 这是一个坏主意。

于 2012-08-06T14:34:40.443 回答
0

很好,我发现自己很棒:)

谢谢你,再见!

…………

开个玩笑当然我会给出我找到的解决方案^ ^

所以这就是我所做的:

我要在客户端上完成的显示(正常......)我的代码显示了我在服务器上设置的 JFrame 明显显示......在服务器上 xD

我不想改变客户 (VisualVM) 以允许用户最大的灵活性。但是我意识到,要显示我的 HTML 表以使其可用(使用颜色和所有内容),我必须更改客户端(因为 JMX 不支持 JFrame 类型作为返回操作的类型)。

我的操作是从 VisualVM 的 MBeans 插件运行的,我有必要找到它的源代码说“如果你看到我给你的 HTML 你在 JFrame 中显示它,请小心”。

这是我的方法:

- 获取资源

SVN获取VisualVM源码的链接如下:

https://svn.java.net/svn/visualvm~svn/branches/release134

如果像我一样,您在使用 NetBeans 中包含的 SVN 客户端时遇到问题,因为您在代理后面,您可以通过命令行来完成:

svn --config-option servers:global:http-proxy-host=MY_PROXY_HOST --config-option servers:global:http-proxy-port=MY_PROXY_PORT checkout https: //svn.java.net/svn/visualvm~svn/branches/release134 sources-visualvm

当然是把你放在你的目标文件夹(cd C:\Users\me\Documents\SourcesVisualVM 例子)。

- 添加平台 VisualVM

NetBeans 需要 VisualVM 平台为其创建模块(插件)。为此,请转到“工具”->“NetBeans 平台”。

然后点击窗口左下方的“Add Platform ...”,选择下载到这个地址的bin文件夹:http://visualvm.java.net/download.html

你应该有这个:

http://img15.hostingpics.net/pics/543268screen1.png

- 在工作区中添加源 (NetBeansProjects)

将下载的源代码(来自上述链接的 SVN)复制/粘贴到您的 NetBeans 工作区(默认情况下位于 C:\Users\XXX\Documents\NetBeansProjects)。

- Ouverture du projet du plugin MBeans

在 NetBeans 中,右键单击 Project Explorer(或转到菜单“Files”)并单击“Open Project ...”。然后,您将在工作区中拥有一个项目列表。打开“release134”->“Plugins”中的项目“mbeans”,如下:

http://img15.hostingpics.net/pics/310487screen2.png

- 更改文件“platform.properties”

要构建插件,您必须为您的平台定义一些变量。为此,请打开工作区目录release134\plugins\nbproject中的文件platform.properties。替换内容(通过更改与您相比的路径):

cluster.path=\
    C:\\Program Files\\java6\\visualvm_134\\platform:\
    C:\\Program Files\\java6\\visualvm_134\\profiler

# Deprecated since 5.0u1; for compatibility with 5.0:
disabled.clusters=
nbjdk.active=default
nbplatform.active=VisualVM_1.3.4
suite.dir=${basedir}

harness.dir= C:\\Program Files\\NetBeans 7.1.2\\harness

- 更改类 XMBeanOperations

要添加我们的功能(显示 HTML 表格),您必须更改处理操作的类,即com.sun.tools.visualvm包中的XMBeanOperations类。模块.mbeans

在第 173 行,替换:

if (entryIf.getReturnType() != null &&
                            !entryIf.getReturnType().equals(Void.TYPE.getName()) &&
                            !entryIf.getReturnType().equals(Void.class.getName()))
                        fireChangedNotification(OPERATION_INVOCATION_EVENT, button, result);

经过 :

if (entryIf.getReturnType() != null &&
                            !entryIf.getReturnType().equals(Void.TYPE.getName()) &&
                            !entryIf.getReturnType().equals(Void.class.getName())) {
                        if (entryIf.getReturnType() instanceof String) {
                            String res = result + "";
                            if (res.indexOf("<html>") != -1) {
                                JFrame frame = displayHTMLJFrame(res, button.getText());
                                frame.setVisible(true);
                            }
                            else
                                fireChangedNotification(OPERATION_INVOCATION_EVENT, button, result);
                        } else
                            fireChangedNotification(OPERATION_INVOCATION_EVENT, button, result);
                    }

使用您放置在“void performInvokeRequest(最终 JButton 按钮)”上方的创建 JFrame 的方法,例如:

// Display a frame with HTML code
public JFrame displayHTMLJFrame(String HTML, String title){
        JFrame fen = new JFrame();
    fen.setSize(1000, 800);
    fen.setTitle(title);

    JEditorPane pan = new JEditorPane();
    pan.setEditorKit(new HTMLEditorKit());
    pan.setEditable(false);

    pan.setText(HTML);
    fen.add(pan);
    return fen;
}

我们可以看到我们已经对返回类型进行了测试,如果它是一个返回的字符串,如果是这样,如果我们在这个字符串中看到 balise ,那么我们通过打开一个 JFrame 来替换点击的结果您输入的字符串,是什么让我们显示我们的 HTML 代码!

- 创建一个 .nbm

.nbm 文件是插件的部署文件。只需右键单击您的项目(在项目资源管理器中),然后单击“创建 NBM”。您的文件 .nbm 将在项目根目录的“build”文件夹中创建。

- 在 VisualVM 中安装插件

要安装你的插件,你必须进入 VisualVM,进入“工具”->“插件”选项卡,然后“下载”,点击“添加插件...”。选择您的插件 .nbm,然后单击“安装”。然后按照说明进行操作。

有用的资源

http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/

http://visualvm.java.net/"]http://visualvm.java.net/

http://visualvm.java.net/api-quickstart.html (Créer un plugin VisualVM avec NetBeans)

非常感谢您的帮助 Tomas Hurka ;)

于 2012-08-14T08:33:47.920 回答