这篇文章引见如何在规范Java(Java SE,也称作J2SE)平台上用Headless形式。
Headless形式是在缺少显示屏、键盘或许鼠标时的系统设置装备摆设。听起来难以想象,但现实上你可以在这中形式下完成分歧的操纵,乃至是用图形数据也能够。
那里才干用到此形式呢?想一想你的使用不断的生成一张图片,比方,当用户每次登岸系统是都要生成一张认证图片。当创立图片时,你得使用既不需求显示器也不需求键盘。让我们假定一下,如今你的使用有个主架构或许专有Server,但这个办事没有显示器,键盘或许鼠标。幻想的决议是用情况的大量视觉盘算才能而不长短视觉特征。在Headless形式下生成的图片可以通报到Headful系统实行更深条理衬着。
在java.awt.toolkit和java.awt.graphicsenvironment类中有很多办法,除对字体,图象和打印的操纵外另有挪用显示器,键盘和鼠标的办法。可是有一些类中,比方Canvas 和 Panel,可以在headless形式下履行。在J2SE 1.4平台以后就供给了对Headless形式的支撑。
注:这篇文章重点讲的是Java SE6 平台版本的文档。任何API的增加或其他加强Java SE平台的标准是由JSR270专家组(JSR 270 Expert Group.)的审查和同意。
Toolkit
java.awt.Toolkit类是Abstract Window Toolkit (AWT)的 一切完成类的笼统父类。Toolkit的子类用于把各类AWT组件绑定到特定的当地toolkit完成上去。办法 | 描绘 |
---|---|
public static boolean
isHeadless() |
测试情况能否为headless, 关于能否不支撑display device,keyboard,mouse。假如这个办法returns true,theToolkitandGraphicsEnvironmentclasses 抛出(thrown)依靠于display device, keyboard, mouse的aHeadlessExceptionis异常. |
public boolean
isHeadlessInstance() |
Returns thisGraphicsEnvironmentcan 能否支撑dieplay device,keyboard,mouse. 假如这个办法 returns true, theGraphicsEnvironmentthat 抛出(throw)一个依靠于 display device, keyboard, mouse的aHeadlessExceptionis 异常. |
留意:isHeadless()办法反省特定的系统属性,java.awt.headless而不是系统的硬件设置装备摆设.
HeadlessException 抛出的代码,这取决于display device、keyboard、mouse在一个情况称为不支撑任何这些.独一的破例是来自一个UnsupportedOperationException,自身就是起源于一个RuntimeException.
设置 Headless形式
运用Headless形式操纵,您必需起首了解怎么反省和设置系统属性与此相干的形式。另外,你必需了解怎么创立一个默许的Tools包运用Tools箱的无头完成类.
系统属性设置装备摆设
为了启用headless形式,需求运用setProperty()办法去设置响应的系统属性。本办法可让你用希冀的值来设置系统属性。
System.setProperty("java.awt.headless", "true");
上面的代码中,java.awt.headless是一个系统属性,true是我们设定的值。
假如你想在一个类似的顺序中运用headless和传统情况,你可使用下面的号令行来完成:
java -Djava.awt.headless=true
创立默许Toolkit
假如名字为java.awt.headless的系统属性被设置为true,那末headlessTools包就会被运用。接下来运用getDefaultToolkit()办法来创立一个headless toolkit的实例:
Toolkit tk = Toolkit.getDefaultToolkit();Headless形式反省
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); boolean headless_check = ge.isHeadless();该办法反省java.awt.headless系统属性。假如这个属性有一个为true的值,那末就会从Tools包和依靠于一个显示器,键盘,鼠标的GraphicsEnvironment类的区域中抛出一个HeadlessException。
下面的代码会在屏幕上绘制出一个空缺的矩形区域,你可以在上面绘制线条。可使用Canvas类创立一个新的Canvas组件。
final Canvas c = new Canvas() { public void paint(Graphics g) { Rectangle r = getBounds(); g.drawLine(0, 0, r.width - 1, r.height - 1); g.drawLine(0, r.height - 1, r.width - 1, 0); } };
这段代码显示了怎样运用Font类画一个文本字符串并设置文字的字体。Graphics工具是用来绘制这个字符串的。
public void paint(Graphics g) { g.setFont(new Font("Arial", Font.ITALIC, 12)); g.drawString("Test", 32, 8); }
Colors
这段代码显示了怎么运用指定的红,绿,蓝的值来设置一条线的色彩。Graphics工具是用来绘制这条线的。
public void paint(Graphics g) { g.setColor(new Color(255, 127, 0)); g.drawLine(0, r.height - 1, r.width - 1, 0); }
Images
鄙人面的代码中,javax.imageio.ImageIO类的运用read()办法对图1所示的grapefruit.jpg文件实行解码,并前往一个缓存图片。
Image i = null; try { File f = new File("grapefruit.jpg"); i = ImageIO.read(f); } catch (Exception z) { z.printStackTrace(System.err); }
图1。grapefruit.jpg图象文件
这段代码演示了怎么打印曾经预备好的画布,你可使用paint办法自界说打印机的的默许画面。
PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintable(new Printable() { public int print(Graphics g, PageFormat pf, int pageIndex) { if (pageIndex > 0) { return Printable.NO_SUCH_PAGE; } ((Graphics2D)g).translate(pf.getImageableX(), pf.getImageableY()); // Paint canvas. c.paint(g); return Printable.PAGE_EXISTS; } });
Beep
下面的这段代码展现了假如运用 Toolkit类的beep办法收回嘟嘟声。
Toolkit tk = Toolkit.getDefaultToolkit(); tk.beep();
以下的HeadlessBasics例子应用了文章中描绘的一切功用。
要运转这个的例子,需求用javac对下面的代码实行编译。复制grapefruit.jpg图片文件到HeadlessBasics类地点的目次下面。
import java.awt.*; import java.io.*; import java.awt.print.*; import javax.imageio.*; public class HeadlessBasics { public static void main(String[] args) { // Set system property. // Call this BEFORE the toolkit has been initialized, that is, // before Toolkit.getDefaultToolkit() has been called. System.setProperty("java.awt.headless", "true"); // This triggers creation of the toolkit. // Because java.awt.headless property is set to true, this // will be an instance of headless toolkit. Toolkit tk = Toolkit.getDefaultToolkit(); // Standard beep is available. tk.beep(); // Check whether the application is // running in headless mode. GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); System.out.println("Headless mode: " + ge.isHeadless()); // No top levels are allowed. boolean created = false; try { Frame f = new Frame("Frame"); created = true; } catch (Exception z) { z.printStackTrace(System.err); created = false; } System.err.println("Frame is created: " + created); // No other components except Canvas and Panel are allowed. created = false; try { Button b = new Button("Button"); created = true; } catch (Exception z) { z.printStackTrace(System.err); created = false; } System.err.println("Button is created: " + created); // Canvases can be created. final Canvas c = new Canvas() { public void paint(Graphics g) { Rectangle r = getBounds(); g.drawLine(0, 0, r.width - 1, r.height - 1); // Colors work too. g.setColor(new Color(255, 127, 0)); g.drawLine(0, r.height - 1, r.width - 1, 0); // And fonts g.setFont(new Font("Arial", Font.ITALIC, 12)); g.drawString("Test", 32, 8); } }; // And all the operations work correctly. c.setBounds(32, 32, 128, 128); // Images are available. Image i = null; try { File f = new File("grapefruit.jpg"); i = ImageIO.read(f); } catch (Exception z) { z.printStackTrace(System.err); } final Image im = i; // Print system is available. PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintable(new Printable() { public int print(Graphics g, PageFormat pf, int pageIndex) { if (pageIndex > 0) { return Printable.NO_SUCH_PAGE; } ((Graphics2D)g).translate(pf.getImageableX(), pf.getImageableY()); // Paint the canvas. c.paint(g); // Paint the image. if (im != null) { g.drawImage(im, 32, 32, 64, 64, null); } return Printable.PAGE_EXISTS; } }); try { pj.print(); } catch (Exception z) { z.printStackTrace(System.err); } } }
图2显示了这个例子中的打印输出后果。
图2。HeadlessBasics的打印输出。
另外,你可以看到以下的信息:
Headless mode: true java.awt.HeadlessException at java.awt.GraphicsEnvironment.checkHeadless(Unknown Source) at java.awt.Window.<init>(Unknown Source) at java.awt.Frame.<init>(Unknown Source) at HeadlessBasics.main(HeadlessBasics.java:24) Frame is created: false java.awt.HeadlessException at java.awt.GraphicsEnvironment.checkHeadless(Unknown Source) at java.awt.Button.<init>(Unknown Source) at HeadlessBasics.main(HeadlessBasics.java:39) Button is created: false本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协定,假如我们的任务有进犯到您的权益,请实时联络我们。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务