2KB项目,专业的源码交易网站 帮助 收藏 每日签到

在 Java SE 平台上运用 Headless 形式

  • 时间:2019-03-14 19:46 编辑:2KB 来源:2KB.COM 阅读:407
  • 扫一扫,手机访问
  • 分享
摘要:
Java 英文原文:Using Headless Mode in the Java SE Platform

这篇文章引见如何在规范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完成上去。 

假如显示装备,键盘或鼠标不支撑的话,非常多组件城市受影响。一个适宜的类结构器该当抛出一个HeadlessException异常:

    Button
    Checkbox
    Choice
    Dialog
    FileDialog
    Frame
    Label
    List
    Menu
    MenuBar
    MenuItem
    PopupMenu
    Scrollbar
    ScrollPane
    TextArea
    TextField
    Window

这类分量级的组件需求有一个操纵系统级别上对等的图形函数来支撑它,在headless的机械上它们将不克不及正常任务。 

与Canvas、Panel和Image组件相干的组件不需求抛出HeadlessException异常,由于这些组件在操纵系统级别上的对等图形函数可使用空函数,然后作为轻量级组件来处置。 一个Headless的toolkit也会把Java组件绑定到当地资本上去,可是它只要在资本中不包括显示装备或输出装备时才会如许做。 
Graphics Environment

java.awt.GraphicsEnvironment类是一个笼统类,它描绘了在给定平台中,可以在Java技巧中运用的由GraphicsDevice工具和Font工具构成的聚集。该GraphicsEnvironment中的资本可所以当地的也能够是远程装备。GraphicsDevice工具可所以显示器,打印机或许图形缓存等,而且它们是Graphics2D 绘制函数的目的。每个GraphicsDevice都有很多与之联系关系的GraphicsConfiguration工具。这些工具指定了分歧的设置装备摆设情况,在这些设置装备摆设情况中可使用GraphicsDevice。 Table 1 显示GraphicsEnvironment 办法,反省Headless形式支撑
Table 1.  Headless 形式办法   
   
办法 描绘
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形式反省

要反省Headless形式的可用性,运用GraphicsEnvironment类的isHeadless()办法:
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
boolean headless_check = ge.isHeadless();
该办法反省java.awt.headless系统属性。假如这个属性有一个为true的值,那末就会从Tools包和依靠于一个显示器,键盘,鼠标的GraphicsEnvironment类的区域中抛出一个HeadlessException。
在Headless形式中操纵

设置好headless形式并创立一个headlessTools包的实例后,您的使用顺序可以履行以下操纵:

    创立轻量级组件,如Canvas,Panel,和Swing组件,除top级别.
    搜集关于可用的字体、字体目标和字体设置的信息
    设置色彩来衬着文本和图形
    发明和获得图象,为衬着预备图片
    运用java.awt.PrintJob, java.awt.print.*, 和 javax.print.* 类实行打印。
    收回"哔哔"音频。

Canvas(画布)

下面的代码会在屏幕上绘制出一个空缺的矩形区域,你可以在上面绘制线条。可使用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);
	}
};

Fonts(字体)

这段代码显示了怎样运用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图象文件

Print

这段代码演示了怎么打印曾经预备好的画布,你可使用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();

运用Headless形式容易例子

以下的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,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部