首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试JNLP启动应用程序

调试JNLP启动应用程序
EN

Stack Overflow用户
提问于 2012-06-05 14:56:59
回答 3查看 18.4K关注 0票数 9

我创建了一个Java桌面应用程序(使用Swing),现在正在尝试使用JNLP从网络启动它。当我从终端启动它时,应用程序工作得很好,但是一旦我从JNLP启动它,它就不会关闭。每次我都得手动杀死这个过程。

我读到,如果我的JFrame使用DISPOSE_ON_CLOSE作为默认的关闭操作,可能会出现问题,但它没有,它使用DO_NOTHING_ON_CLOSE (隐式)。此外,在释放所有对象之后,我将显式调用System.exit(0)

代码语言:javascript
复制
f = new JFrame("Pacman");
f.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        // Terminate the Game-loop:
        GameLoop.INSTANCE.stopLoop();
        // Close the application:
        System.exit(0);
    }
});

我猜当我关闭应用程序时可能会引发异常,但是我找不到一种方法来获得用JNLP启动的正在运行的应用程序的控制台输出(例如堆栈-跟踪)。以下是我尝试过的:

  • 使用调试参数启动javaws并与jconsole连接(工作,但我找不到任何异常或控制台输出)。
  • 使用调试参数启动javaws,并将IntelliJ调试器附加到它(也可以工作,但不提供任何输出)

那么,我如何使用JNLP启动应用程序并获得输出(写入默认的输出流和错误流),就像使用普通桌面应用程序一样?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-06 13:12:09

解决方案1-启用Java控制台,并查找异常。

您可以通过Java控制面板来完成它。切换到高级选项卡,并在Java控制台中确保选择Show。

然后,运行您的应用程序并监视控制台中是否有异常。修正异常。

解决方案2-调试正在运行的应用程序(正确)。

像这样启动应用程序(用于Java1.6及更高版本):

代码语言:javascript
复制
javaws -verbose -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=8123 http://myserver.com/path/to/myapp.jnlp

如果使用早期的java版本(1.4.2,1.5),请设置环境变量,如下所示:

代码语言:javascript
复制
set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=8123"

并通过以下方式运行该应用程序:

代码语言:javascript
复制
javaws http://myserver.com/path/to/myapp.jnlp

当应用程序运行时:

  1. 附加调试器(Eclipse将使用Run =>调试配置=>远程Java,并在Connection面板中输入传递给javaws的参数端口(在本例中为8123)。
  2. windowClosing方法中设置一个断点。
  3. 尝试关闭应用程序- Eclipse应该会中断断点上的执行
  4. 进入-- GameLoop.INSTANCE.stopLoop()方法,以查看挂起的位置/时间。

不要期望在控制台中看到解决方案,只需使用调试器执行代码--如果应用程序挂起,它将显示您的位置。

票数 17
EN

Stack Overflow用户

发布于 2017-08-03 16:51:56

有时,即使控制台也不显示任何内容,例如,TLS/SSL握手(即close_notify或handshake_failure)出现问题时。在这些情况下,您需要执行以下操作:

  1. 在Java控制面板> Advanced中启用Java日志和跟踪。

  1. 启用用于调试Java的参数&启动JNLP,有两种方法可以这样做: 2.a.下载JNLP文件并从命令行执行它(在这种情况下不需要SET命令)。 设置JAVA_TOOL_OPTIONS=-Djavax.net.deb=所有javaws -wait jnlp.jnlp 2.b.在Java > Java > View中为JVM添加参数(即-Djavax.net.debug=all) (在此特定情况下这不是必需的),并从浏览器启动JNLP文件:

  1. 日志和跟踪位于我粘贴这些位置的log目录中的Java部署主页目录中: a. Windows XP:%HOME%\Application Data\Sun\Java\Deployment b. Windows 7/Vista:%APPDATA%\..\LocalLow\Sun\Java\Deployment c. Linux/Solaris:%HOME%/.java/deployment
票数 2
EN

Stack Overflow用户

发布于 2020-02-07 11:34:24

此答案是npe回答的另一种选择,以启用远程调试(Windows)。

  • 去控制小组;
  • 点击Java,打开Java控制面板;
  • 在Java控制面板中,转到Java选项卡,然后单击“查看”;
  • 这将打开一个带有已安装java版本的窗口。在运行时参数上放置"-Xdebug -Xrunjdwp:transport=dt_socket,address=8123,server=y,suspend=n" (如果您想在应用程序启动时进行调试,将“挂起”改为"y",这将使应用程序停止,直到编辑器远程连接为止);

在此之后,将编辑器配置为远程调试到已配置的端口(本例中为localhost:8123)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10899675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档