我正在使用Windows上的Eclipse IDE(氧气)学习Java(SE8)。我以前做过一些“业余”编程,但这是我第一次正式上这门课。我希望能够在普通控制台(System.out.println)中打印分配所需的输出,并同时在不同的控制台中打印正在发生的信息文本。
printToConsole1(“普通程序输出”);printToConsole2(“幕后信息”);
我可以在Java中做类似的事情吗?
您可以打印到标准err(system.err.println()
),我的IDE(不是Eclipse)将以不同的方式格式化这些行--它们以红色显示,使它们更容易定位。
关于Swing控制台,不,我想的是不同的东西。也就是说,只使用Makoto建议的日志框架,然后只使用将日志行显示到窗口的日志处理程序。下面是我创建的一个简短示例。
/**
* A log handler which creates a visible window for logging output.
*
* <p>A WindowHandler is a standard log handler which may be utilized
* in just the same was as any other log handler.</p>
*
* <p>In addition, a convenience static method is provided, WindowHandler.show(),
* which will programmatically install a root handler and display a window,
* allowing debugging output to be easily captured and viewed on screen.</p>
*
* @author Brenden
*/
public class WindowHandler extends java.util.logging.Handler {
// These static globals must be accessed on the EDT only!
private static WindowHandler globalHandler;
private static final ArrayList<WeakReference<WindowHandler>> windowList =
new ArrayList<>();
private JTextArea text;
private JFrame logWindow;
/**
* Returns the window component (usually a JFrame) associated with this
* WindowHandler.
*
* @return The top-level window for this handler.
*/
public Component getWindow() {
return logWindow;
}
/**
* Returns the JTextArea associated with the logging output captured by
* this handler.
*
* @return A JTextArea where logging is displayed.
*/
public JTextArea getTextArea() {
return text;
}
/**
* A list of ALL WindowHandler created so far in the system.
*
* <p>This list is useful for getting a list of windows on screen, for
* example, and then performing some operation on these windows. For
* example, hiding all windows, or closing them, or tiling them on screen
* for easier viewing.</p>
*
* @return An array list of all current window handlers.
*/
public static ArrayList<WindowHandler> getHandlers() {
ArrayList<WindowHandler> retVal = new ArrayList<>();
for( WeakReference<WindowHandler> wr : windowList ) {
WindowHandler h = wr.get();
if( h != null ) retVal.add( h );
}
return retVal;
}
/**
* A convenience method for starting an instance of a WindowHandler.
*
* <p>Call this method at the beginning of your program. After calling
* this method, all debugging output will be captured by the
* WindowHandler. Note that individual loggers still have their respective
* log levels. WindowHandler is set to Level.ALL by default, but won't
* receive output from loggers that have their own levels set too high
* to capture output.</p>
*/
public static synchronized void show() {
utilEDTWait( () -> {
if( globalHandler == null ) {
Logger root = Logger.getLogger( "" );
root.addHandler( globalHandler = new WindowHandler() );
} else {
globalHandler.getWindow().setVisible( true );
}
} );
}
/**
* Creates a new WindowHandler.
*
* <p>This method creates a new handler, sets its level to ALL, and creates
* the necessary Swing components on the EDT, and displays those components
* as well. After creation, this handler may still be configured as normal
* for any other logging handler.</p>
*/
public WindowHandler() {
utilEDTWait( () -> {
setLevel( Level.ALL );
JFrame frame = new JFrame( "DEBUG" );
text = new JTextArea();
text.setEditable( false );
text.setPreferredSize( new Dimension( 300, 300 ) );
JScrollPane scroll = new JScrollPane( text );
frame.add( scroll );
frame.setDefaultCloseOperation( JFrame.HIDE_ON_CLOSE );
frame.pack();
frame.setLocation( windowList.size()*20, windowList.size()*20 );
frame.setVisible( true );
logWindow = frame;
windowList.add( new WeakReference<>( this ) );
} );
}
@Override
public void publish( LogRecord record ) {
SwingUtilities.invokeLater( () -> {
StringBuilder log = new StringBuilder( text.getText() );
log.append( record.getMessage() );
log.append( " -- " );
log.append( record.getLoggerName() );
log.append( " : " );
log.append( record.getLevel() );
log.append( " // " );
log.append( new Date( record.getMillis() ) );
log.append( "\n" );
text.setText( log.toString() );
} );
}
@Override
public void flush() {
}
@Override
public void close() throws SecurityException {
}
private static void utilEDTWait( Runnable r ) {
if( SwingUtilities.isEventDispatchThread() ) {
r.run();
} else {
try {
SwingUtilities.invokeAndWait( r );
} catch( InterruptedException ex ) {
Thread.currentThread().interrupt();
throw new RuntimeException( ex );
} catch( InvocationTargetException ex ) {
Logger.getLogger( WindowHandler.class.getName() ).log( Level.SEVERE, null, ex );
}
}
}
}
问题语句:我有一个在Xcode中运行的程序,它有一堆print()语句,可以很好地将输出打印到调试控制台。然而,我希望也能够将这些输出重定向到一个文件,这样我就可以让用户将它们发送给我,作为调试的一种方式。 SO上找到的解决方案使我可以将输出重定向到文件,但调试控制台输出将丢失。 问:我想要我的蛋糕和吃它。我希望能够将print()语句重定向到调试控制台和文件。 所以我有引用:https://st
我在NetBeans IDE中使用Java编写了一个简单的程序。在今天早上对main方法做了一些更改后,当我运行程序时,控制台不会打印任何东西。我只是想让它到达startMenus(sc)。编辑:我现在已经放入了一些system.out.println(),但它没有达到“blah2”,就在我的第一个循环之后...
有没有什么方法可以将控制台输出镜像到java中的localhost,甚至可以添加一些不错的CSS。如果同一网络中的其他设备也能到达控制台,那就太酷了。我做了很多关于这个主题的研究,但没有找到任何关于这个的网站/线程/问题。帮助将不胜感激!
我花了将近3天的时间来找出为什么在一个大项目中 显示为“?”在另一个从头开始建造的项目中,它显示为“你好". 我正在使用IntellijIdea,但在使用 这两个项目之间唯一的两个区别是在构建系统中:第一个使用gradle,第二个不使用(只是一个简单的项目)。第二个区别是关于以下代码的输出 第一个输入“Charset.defaultCharset=windows-1252”,第二个输入“Chars
我已经升级了eclipse,现在控制台输出中的字符混杂在一起。它似乎不会随着输出的出现或滚动的移动而刷新。如何解决这个问题?什么也做不到,如果我移动鼠标,可能屏幕的某些部分会重新绘制,否则它们不会 Eclipse IDE for Java Developers版本:2019-06(4.12.0)构建id:20190614-1200 OS:Mac OS X,v.10.12.6,x86_64/coco
问题内容: 我的C程序粘贴在下面。在bash中,程序打印“ char is”,不打印Ω。我的语言环境均为en_US.utf8。 问题答案: 这很有趣。显然,编译器将omega从UTF-8转换为UNICODE,但libc某种程度上将其弄乱了。 首先:-format说明符期望一个(即使在wprintf -version 中也是如此),因此您必须指定(并因此指定字符串)。 其次,如果您像这样将语言环境设