在代码中: 的System.out.println( “myPackage.MyClass”);
在Eclipse控制台中: myPackage.MyClass.myMethod
我想在Console中单击输出(myPackage.MyClass.myMethod),它会直接显示相应的方法,类似于异常堆栈跟踪所发生的情况。有什么想法吗?
答案 0 :(得分:14)
也许这对其他人来说很清楚,但我发现其他答案令人困惑,尽管这是正确的。 eclipse控制台解析模式(FileName.java:lineNumber)是该文件中该行的链接:
(MyFile.java:2)
正如其他答案所指出的,有很多方法可以将其输出到控制台。在线的位置无关紧要,它只是一种模式匹配。正如Colin Smith所示,log4j PatternLayout可以使用(%F:%L)
来获取文件名和行号。要以编程方式获取文件名和行号,请参阅this question。
问题是关于链接到方法,我相信你可以使用Tonny Madsen推荐的consolePatternMatchListeners方法,并在this question中有更详细的描述。
答案 1 :(得分:9)
异常堆栈跟踪的超链接基于行末的文件名和行号。 E.g。
Stack trace:
org.eclipse.jface.internal.databinding.provisional.BindingException: string property does not have a read method.
at org.eclipse.jface.internal.databinding.internal.beans.JavaBeanObservableValue.doGetValue(JavaBeanObservableValue.java:102)
at org.eclipse.jface.internal.databinding.internal.beans.JavaBeanObservableValue.setValue(JavaBeanObservableValue.java:83)
对于第一个堆栈跟踪,它位于文件JavaBeanObservableValue.java
中的第102行。在当前类路径中搜索该文件,因此如果您有多个具有相同名称的类,则始终会找到第一个...
换句话说,如果你想根据你的例子添加扩展的超链接,你需要稍微扩展一下控制台视图......
...可以使用org.eclipse.ui.console.consolePatternMatchListeners
扩展点完成此操作。使用这个扩展点非常容易,通过查看JDT中的示例,您应该能够让您的示例在没有太多工作的情况下工作......
答案 2 :(得分:7)
更简单的方法是欺骗控制台为您创建链接。格式很简单:
System.out.println("(" + new TestBed().getClass().getSimpleName() + ".java:" + 18 + ")");
显然,您可以根据需要在代码中提供类类型和行号。
答案 3 :(得分:3)
或者,如果您使用log4j,您可以像这样配置您的appender:
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p %m (%F:%L) in %t%n"/>
</layout>
</appender>
如果您希望它在IntelliJ IDEA中工作,您可以使用:
<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p %m - at %c.%M(%F:%L) in %t%n"/>
答案 4 :(得分:0)
我使用自定义控制台视图,并使用
将一个IPatternMatchListener添加到MessageConsoleconsole.addPatternMatchListener(...)
使用侦听器的一个重要优点是事件提供了创建超链接所需的偏移量。
可以在此处找到创建超链接的IPatternMatchListener实现的起点:
最棘手的部分似乎是从文件名中获取完整的文件路径(我不使用记录器)。
在这里可以找到遮阳插件使用的解决方法:
请参阅方法“dereferenceWindowsLink”
我仍在寻找另一种选择。
答案 5 :(得分:0)
这是一个基于其他人的答案的简单包装方法,可以在任何地方使用它来获取格式化的字符串,以便Eclipse控制台链接到 getSourceCodeLine()的任何文件中的行被调用。我还发现在Eclipse中打印到System.err将以 red 显示。
public static String getSourceCodeLine() {
// An index of 1 references the calling method
StackTraceElement ste = new Throwable().getStackTrace()[1];
return "(" + ste.getFileName() + ":" + ste.getLineNumber() + ")";
}
public static void main( String[] args )
System.out.println("Here's a link to " + getSourceCodeLine());
System.err.println("And a red link to " + getSourceCodeLine());
}
答案 6 :(得分:0)
要添加到其他答案中,您可以使用以下古怪的格式链接到特定的班级:
java.util..(List.java:100)
java.awt..(List.java:100)