JAVA彩色终端库javacurses的使用 -- 感觉并不好
import jcurses.system.CharColor;import jcurses.widgets.*;public class JcursesAppMain {public static void main(String[] args) throws Exception{//String url = ClassLoader.getSystemClassLoader().getResource("jcurses/system/Toolkit.class").toString();//url=url.trim();System.out.println(url);// if (url.startsWith("jar:file:")) {// url = url.substring("jar:file:".length(),url.length());// System.out.println(url);// System.out.println(url.length());// System.out.println("/jcurses.jar!/jcurses/system/Toolkit.class".length());// url = url.substring(0,url.length()-"/jcurses.jar!/jcurses/system/Toolkit.class".length());// }//System.out.println(url);//Window w = new Window(40, 20, true, "Hello World Window"); DefaultLayoutManager mgr = new DefaultLayoutManager(); mgr.bindToContainer(w.getRootPanel()); mgr.addWidget( new Label("Hello World! 你好么?", new CharColor(CharColor.WHITE, CharColor.GREEN)), 0, 0, 40, 20, WidgetsConstants.ALIGNMENT_CENTER, WidgetsConstants.ALIGNMENT_CENTER); w.show(); Thread.currentThread().sleep(15000); w.close(); // reset the native console}}
?
javacurses 功能库 是一个JAVA彩色终端界面组件库,文件个数不多,且支持Windows和UNIX/LINUX系统.
但是本人在使用过程中发现如下问题:
1. 中文支持不好 <--见图>
2. 第二,在jcurses.system.Toolkit.getLibraryPath()这个方法的实现相当的拙劣! 见如下源码:
private static String getLibraryPath() { String url = ClassLoader.getSystemClassLoader().getResource("jcurses/system/Toolkit.class").toString(); url=url.trim(); if (url.startsWith("jar:file:")) { url = url.substring("jar:file:".length(),url.length()); url = url.substring(0,url.length()-"/jcurses.jar!/jcurses/system/Toolkit.class".length()); } else if (url.startsWith("file:")) { url = url.substring("file:".length(),url.length()); url = url.substring(0,url.length()-"/classes/jcurses/system/Toolkit.class".length()); url = new File(url,"lib").getAbsolutePath(); } else { throw new RuntimeException("couldn't find jcurses library"); } String [] fileNames = new File(url).list(); boolean found = false; for (int i=0; i<fileNames.length; i++) { String name = fileNames[i]; if (name.trim().startsWith("libjcurses")) { url = new File(url,name).getAbsolutePath(); found = true; break; } } if (!found) { throw new RuntimeException("couldn't find jcurses library"); } return url; }
?
在 String [] fileNames = new File(url).list();处有可能引发 空指针异常,如果你改了jcurses.jar 这个jar文件的名称的话. 我因为改了这个jar的名字为jcurses-win.jar来区分是哪个平台的版本,结果就爆出空指针异常.如果不查源代码,根本找不到问题的出处.
?
原因代码在此:
url = url.substring(0,url.length()-"/jcurses.jar!/jcurses/system/Toolkit.class".length());
?
写死了的东西!
?
?
使用这个库,注意要将libjcurses.dll放到jcurses.jar相同的文件夹下.
?
3. 这个东西在 Eclipse中运行时并不能显示,因为Eclipse捕获了命令行输出显示
这里是放在Jcreator下测试成功的!
?
?
?
?