java
未读前言在使用 Java 开发客户端程序时,有时会需要在界面中使用网页浏览器组件,用来显示一段 HTML 或者一个特定的网址。本文将介绍在界面中使用浏览器组件的四种方法,给出示例的代码,并且分析每种方法的优点与不足,便于 Java 开发者在实际开发过程中根据自己的需要来选择。
JDK 中的实现 - JEditorPaneSwing 是一个用于开发 Java 应用程序图形化用户界面的工具包,它是以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格,而且它是轻量级(light-weight)组件,没有本地代码,不依赖于操作系统的支持,这是它与 AWT 组件的最大的区别。
在 Swing 中,有一个组件是 JEditorPane,它是一个可以编辑任意内容的文本组件。这个类使用了 EditorKit 来实现其操作,对于给予它的各种内容,它能有效地将其类型变换为适当的文本编辑器种类。该编辑器在任意给定时间的内容类型由当前已经安装的 EditorKit 来确定。
默认情况下,JEditorPane 支持以下的内容类型:
text/plain
纯文本的内容,在此情况下 ...
多线程-并发
未读Java的中断是一种协作机制。也就是说调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己。
一、Java中断的现象首先,看看Thread类里的几个方法:
public static boolean interrupted测试当前线程是否已经中断。线程的中断状态 由该方法清除。换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)boolean isInterrupted ()测试线程是否已经中断。线程的中断状态 不受该方法的影响。public void interrupt ()中断线程。
上面列出了与中断有关的几个方法及其行为,可以看到interrupt是中断线程。如果不了解Java的中断机制,这样的一种解释极容易造成误解,认为调用了线程的interrupt方法就一定会中断线程。
其实,Java的中断是一种协作机制。也就是说调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求 ...
jvm
未读字节码指令集
Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(Opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(Operands)所构成。
对于大部分为与数据类型相关的字节码指令,他们的操作码助记符中都有特殊的字符来表明专门为哪种数据类型服务:i代表对int类型的数据操作,l代表long,s代表short,b代表byte,c代表char,f代表float,d代表double,a代表reference。
加载和存储指令:
将一个局部变量加载到操作栈的指令包括有:iload、iload_、lload、lload_、fload、fload_、dload、dload_、aload、aload_将一个数值从操作数栈存储到局部变量表的指令包括有:istore、istore_、lstore、lstore_、fstore、fstore_、dstore、dstore_、astore、astore_将一个常量加载到操作数栈的指令包括有:bipush、sipush、ldc、ldc_w、ldc2_w、aconst_null、iconst_m1、iconst_、l ...
在上一篇文章中,我介绍了新的Servlet 3,这是Spring MVC 3.2的新特性——异步支持——的运行环境。第二种使用异步处理的非常主要的原因是使浏览器接受信息的实时更新。例如网页聊天室、股票报价、状态更新、体育赛事直播等。虽然这些应用对于信息延迟的敏感度不同,但是它们的功能需求是类似的。
在标准的HTTP的“请求—响应”语义中,浏览器发出一个请求,服务器端响应一个请求,这就意味着直到浏览器发送请求,服务器才能够返回更新信息。要想实时获取服务器的更新信息,当前有很多种方法可以实现,例如传统轮询、长轮询、HTTP流和最近兴起的WebSocket协议。
传统轮询: 传统轮询采用浏览器不断发送请求,而服务器在收到请求后立即返回信息的方式进行。这种方式适合发送请求较少的情况下使用(请求发送过多服务器就崩溃了)。例如邮箱客户端可以每十分钟检查一次是否有新邮件到来。这种方式简单有效。但是如果需要信息实时反馈给客户端时,请求的发送就非常频繁,这种方式的实现效率就会大大降低。
长轮询: 长轮询中浏览器不断发送请求,而服务器只在有新信息 ...
摘要WWW是互联网上最受欢迎的应用之一,其快速增长导致网络拥塞和服务器超载,缓存技术被认为是减轻服务器负载、降低网络拥塞,减少客户访问延迟的有效途径之一。本文首先描述了Web缓存系统的基本要素及理想属性,然后介绍目前围绕Web缓存技术已经开展的研究,最后讨论Web缓存技术需要进一步研究的问题。
关键字WWW缓存技术代理
1引言
WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户访问延迟增大,WWW服务质量问题日益显现出来。缓存技术被认为是减轻服务器负载、降低网络拥塞、增强WWW可扩展性的有效途径之一,其基本思想是利用客户访问的时间局部性(Temporal Locality)原理,将客户访问过的内容在Cache中存放一个副本,当该内容下次被访问时,不必连接到驻留网站,而是由Cache中保留的副本提供。
Web内容可以缓存在客户端、代理服务器以及服务器端。研究表明,缓存技术可以显著地提高WWW性能[1][2],它可以带来以下好处:
(1)减少网络流量,从而减轻网络拥塞;
(2)降低客户访问延迟,其主要原因有:①缓存在代理服务器中的内容,客户可以直接从代理获取而 ...
一. 前言(Introduction)时光如梭,转眼之间,几年时间就像做梦一样无声无息的逝去!回顾一下,发现2013年是我人生新的起点,因为终于和相恋将近七年的老婆结婚了,为此我在个人博客上发表了一篇文章简单回顾最近的几年,原本只是希望能回顾自己的得失,做一个简单的总结,没想到有那么多朋友能看到并祝福,在此表示感谢。
前段时间一直很忙,忙着项目的进度、忙着项目重构以及代码的优化、忙着应付用户需求的变化等等, 现在终于闲下来了!趁着闲下来的几天时间,想写点什么,却不知道怎么下笔。突然想起最近老婆在新加坡找工作和学习英语的点点滴滴,似乎有一些灵感,不如接下来写一些个人学习英语的切身体会,也好给各位同仁一些参考,同时也可以和大家一起学习交流。
顺便提一下,很多人发邮件问我新加坡怎么样,我的回答:新加坡是一座很漂亮的城市,如果你有机会来旅游、工作、学习或者生活,这里也是一个很不错的选择:
更多图片,请参考:
缅怀三年——炫丽的新加坡(上)
缅怀三年——炫丽的新加坡(下)
新加坡和其他世界都市一样,一则带有国际大都市繁华和忙碌,同时也带有花园城市的艳丽和宁静;仔细享受其中的工作、学习和生 ...
许多应用程序都要求动态生成 PDF 文档。这些应用程序涵盖从生成客户对帐单并通过电子邮件交付的银行到购买特定的图书章节并以 PDF 格式接收这些图书章节的读者。这个列表不胜枚举。在本文中,我们将使用 iText Java 库生成 PDF 文档。我们将向您演示一个样例应用程序,以便您可自行完成它并能更好地理解它。
熟悉 iText V5.3.0 版iText 是一个可从 http://itextpdf.com/ 免费获取的 Java 库(请参见 参考资料)。iText 库非常强大,且支持生成 HTML、RTF 和 XML 文档,还支持生成 PDF 文档。您可以选择各种各样的字体来用于文档中。另外,iText 的结构允许您使用相同代码生成上面提及的任何类型的文档。
iText 库包含使用各种字体生成 PDF 文本、在 PDF 文档中生成表格、向页面中添加水印等的类。iText 还提供了其他许多特性。在一篇文章中无法演示所有这些特性。我们将介绍生成 PDF 所需的基本知识。有关更多详细信息,请参阅供应商提供的文档(参见 参考资料)。
我们将使用 Eclipse 开发我们的样例应用程序。作为一 ...
环境准备:
12eclipse(Helios) 3.6 maven 3.0.4
maven3 安装:
安装 Maven 之前要求先确定你的 JDK 已经安装配置完成。Maven是 Apache 下的一个项目,目前最新版本是 3.0.4,我用的也是这个。
首先去官网下载 Maven:http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.0.4-bin.tar.gz
下载完成之后将其解压,我将解压后的文件夹重命名成 maven,并将它放在 D:\Server 目录下,即 maven 最终的路径是:D:\Server\maven
配置 maven 环境变量:
系统变量:MAVEN_HOME = D:\Server\maven
用户变量:path = %MAVEN_HOME%\bin
相信大家都有配过环境变量的,详细步骤就不说了,对着把属性名和属性值配上的OK了。
打开 cmd,在里面敲:mvn -version
...
迫切希望上手?本文提供了一个很好的 Flask 介绍。假设你已经安装 Flask, 如果还没有安装话,请浏览下 安装 。
一个最小的应用一个最小的应用看起来像这样:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
把它保存成 hello.py (或者类似的文件),然后用 Python 解释器运行它。确保你的应用不叫做 flask.py, 因为这会与 Flask 本身冲突。
$ python hello.py
* Running on http://127.0.0.1:5000/
现在浏览 http://127.0.0.1:5000/,你会看到你的 hello world 问候。
那么这段代码做了什么?
首先我们导入了类 Flask 。这个类的实例化将会是我们的 WSGI 应用。第一个 ...
就像之前的一个评论.我们学习的是思路. 很多人都知道继承关系的类的初始化和实例化的顺序,但如果忘记了怎么办? 如何找到自己的答案? 又如果遇到的问题是关于泛型的擦除问题,又该如何去分析?
思路,重点是思路.泛型擦除先不谈.看继承. 首先给出一个例子,看看它的输出是什么.
1234567891011121314151617public class A { private static String a = "NA"; private String i="NA"; { i = "A"; System.out.println(i); } static { a = "Static A"; System.out.println(a); } public A() { System.out.println("Construct A"); }}
1234567891011121314151617public ...
