我处于一个非常奇怪的位置(从我的java-newbie观点来看):
使用Eclipse我编写了一个“java程序”(一些带有类的.java文件),它基本上(批处理)读取文本* .csv文件,“评估”其内容,并将结果写入* _out.csv文本文件。要找到输入文件,它使用“文件选择器”(从此处获取样本:http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html)
我调试了所有代码,使用调试器,可行。
我运行了代码(主类,它按顺序调用所有其他代码)和它可以工作,在Eclipse中。
< / LI>我将所有项目内容导出到“runnable jar”文件中。
请注意,文件选择器除外,这主要是一个读写的“批处理”:几乎没有用户界面。在Eclipse中,我使用类似“ if(debug)System.out.print(”要打印的东西“)的内容显示了一些内部结果; ”提供设置“ debug ”调试时为TRUE,在生产环境中为FALSE。
以上所有都有效!
现在,启动runnable jar(双击jar文件,在Win / XP中),我可以看到文件选择器,我可以使用它,但是在选择输入文件之后。 .. 没有更多 :(没有用户界面)我不知道文件是否被读取,我没有看到任何生成的输出文件,我甚至没有“控制台”列出任何中间调试消息,看看jar是否正常工作,即使我将调试变量设置为TRUE重新导出它。
有没有办法“运行时调试”正在运行的jar(比如VB的MsgBox或其他东西)?某种“日志文件”我可以“启用”或查看? (显然,因为我的jar没有写结果文件,所以我也不能尝试编写* .log) 我还要说我只是不能在我的机器上安装Eclipse以外的东西(幸运的是它跑了),所以没有通常的开发人员的工具,实用程序和其他有用的东西。
答案 0 :(得分:82)
http://www.eclipsezone.com/eclipse/forums/t53459.html
基本上用以下方式运行:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044
应用程序在启动时将一直等到您从其他来源连接。
答案 1 :(得分:38)
使用特殊选项启动java
命令时,可以激活JVM的调试功能:
java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y -jar path/to/some/war/or/jar.jar
在命令行中启动jar.jar
将:
server=y
)的角色中,侦听端口8000(address=8000
)Listening for transport dt_socket at address: 8000
写入stdout
和suspend=y
)直到某个调试器连接。在此方案中,调试器充当客户端。选择调试器的常用选项有:
jar.jar
应该开始执行。jdb -connect com.sun.jdi.SocketAttach:port=8000
启动答案 2 :(得分:14)
即使它是一个可运行的jar,你仍然可以从控制台运行它 - 打开一个终端窗口,导航到包含jar的目录,然后输入“java -jar yourJar.jar”。它将在该终端窗口中运行,并且sysout和syserr输出将出现在那里,包括来自未捕获异常的堆栈跟踪。编译时一定要将调试设置为true。祝你好运。
只是想到了别的东西 - 如果你使用的是Win7,它通常会遇到用户应用程序将文件写入特定目录的权限问题。确保您编写输出文件的目录是您具有权限的目录。
在未来的项目中,如果它足够大,您可以使用标准日志记录工具之一进行“调试”输出;然后将它重定向到文件而不是依赖于控制台将很容易(ier)。但对于像这样的小型工作,这应该没问题。
答案 3 :(得分:1)
使用IntelliJ IDEA
,您可以创建Jar Application
运行时配置,选择JAR
,源,JRE
来运行Jar
并开始调试。 Here是文档。