Showing posts with label Java. Show all posts
Showing posts with label Java. Show all posts

Thursday, May 23, 2013

在Ubuntu 12.04 LTS中使用OpenJDK及Oracle Java讀取健保卡 - 3

本系列文章的重頭戲來了,因為openjdk和和oracle jdk雖然有99%以上的相似程式,但有些應用程式就限定要用oracle jdk,因此本文要來介紹此問題。
而在Ubuntu使用oracle jdk來讀取智慧卡最大的問題原先以為是讀卡機裝置權限的問題,在經過幾週的搜尋之後,終於發現到是pcsc函式庫路徑的問題,感謝OpenSC網站上的資料

首先將函式庫連結處理好。
$ locate libpcsclite.so
-------看看libpcsclite.so的實際檔案放在哪
-------以下以我的機器為例(Ubuntu 12.04 LTS 64bits)
$ sudo mkdir /usr/lib64
-> 建立此目錄的原因是Ubuntu不管是32位元或64位元都只有/usr/lib的資料夾
-> 而Oracle JDK 64位元版本只認/usr/lib64,故要建立如上資料夾
-> 但在Centos 64位元的機器上原本就有
-> 若是32位元的系統只要以下指令即可
$ sudo ln -s /lib/x86_64-linux-gnu/libpcsclite.so.1.0.0 /usr/lib/libpcsclite.so

接下來若要安裝Oracle JDK有兩種方式,其一是從官網中下載並手動設定。另一種方式則是使用ppa提供的自動安裝程式!在此介紹ppa的方法。


  • 首先移除所有openjdk套件
  • $ sudo apt-get purge openjdk*
    

  • 接下來加入ppa套件庫(ppa:webupd8team/java)
  • $ sudo add-apt-repository ppa:webupd8team/java
    $ sudo apt-get update
    $ sudo apt-get install oracle-java7-installer
    

花一點時間之後即可安裝完成!

測試程式下載

在Ubuntu 12.04 LTS中使用OpenJDK及Oracle Java讀取健保卡 - 2


接續前一篇文章,本文是第二部份,主要在說明使用openjdk及icedtea來執行健保卡程式的讀取。



首先安裝openjdk及icedtea(在此以openjdk7版為例)。

sudo apt-get install openjdk-7* icedtea-7*

接下來即可測試範例程式

在Ubuntu 12.04 LTS中使用OpenJDK及Oracle Java讀取健保卡 - 1

先前協助基隆市撰寫之健保卡認證Applet,其實在W$系統中運作都很正常,某天,突然收到基隆市某校的主任來信說,他們全校都用Ubuntu,會發生找不到讀卡機的狀況,於是就研究一下該如何解決。
花了很久的時間終於發現有兩個方法可以正確的讀取到健保卡,在此和大家分享。

本系列文章共分3段,此是第一部份-讓讀卡機可以正確的在Ubuntu中運作。在第二部份將會介紹使用OpenJDK來讀取健保卡;而第三部份則是使用Oracle JDK來讀取。

Saturday, July 14, 2012

使用openid4java實作Open ID RP (2)

本文接續上一篇,主要在實作程式碼的部份。

首先使用NetBeans建立一個新的Apache Wicket專案,並命名為myrp。依據原文所寫,作者將Web Application中負責和Open ID OP進行通訊的相關功能,放在model的套件中,其中分為兩個項目:

Friday, July 13, 2012

使用openid4java實作Open ID RP (1)

本文的原始出處是IBM技術文章

為了要實作OpenID Provider的Java Web Application,我認為要先了解如何在Java Web Application中先實作Open ID RP,以了解Open ID的運作方式。

OpenID的官網中,針對Java有提供了許多函式庫可以讓我們來使用,在原始文件中是使用openid4java的函式庫,目前可以取得的版本為0.9.6。

另外,為了要試驗Apache Wicket此framework的功能,我也改用Apache Wicket 1.5.3的版本,它和原始文章所使用的版本(1.3.3),在實作上有一些差異!

還有,本文主要說明概念的部份,實作則在下一篇

Thursday, July 12, 2012

Accordions

Accordions的功能和TabPane或是CardPane類似,都可以將用不到的元件先隱藏起來,只顯示目前要使用的元件。不過,Accordions是以類似手風琴的折疊方式,只顯示出標題(header)以供使用者點選。

本文的範例來源一樣是官網,它呈現了結帳的3個步驟。
要注意的是,預設狀況之下,Accordions能允許使用者任意選擇不同的panel,但是此範例則限制使用者只能按『下一步』的按鈕,以瀏覽下一個panel。

FlowPane

FlowPane是讓元件以水平線進行排列的容器,並且具有自動換行的功能。它可以讓元件靠左、靠右或置中對齊,也可以讓元件以垂直對齊基準線(baseline)進行排列。

本範例仍然取自官網,在範例中使用了BaselineDecorator(org.apache.pivot.wtk.effects)來顯示基準線,如果使用者未點選『對齊基準線』的選項,則會顯示出藍線,反之則顯示紅線。

Separators

Separators的作用如同網頁中的水平線一般,本範例一樣來看官網。

使用時很簡單,只要在ui.bxml中指定heading即可。

Text - TextArea

TextArea是被用來放置多行文字的WTK元件,它通常會使用ScrollPane包裏起來,以提供捲軸。本範例來自官網

Text - Suggestion Popups

本範例(同樣來自官網)大致上和上一篇相同,主要的差別在於使用org.apache.pivot.wtk.SuggestionPopup類別來顯示自動完成(auto-complete)的功能。

text - TextInput

Pivot提供了兩種輸入文字的元件,TextInput→單行未格式化的文字,它也可以使用密碼的方式來呈現文字;另一個元件則是TextArea,可允許輸入多行且格式化的文字。本文先介紹TextInput元件。

本範例是由官網取得。它的功能是當使用輸入的字元足以判斷出唯一的值時,系統會自動幫使用者填入剩餘的字元(顯示台中市各區名稱)。

Repeatable List Buttons

Pivot支援repeatable list button,意思是使用者可以簡單的重複執行選定的項目。它適合用來執行像橡皮圖章(rubber stamp)的功能。

本範例由官網所取得,它展示的就是使用List Button來自動設定已選定之CheckBox元件的文字顏色。

Wednesday, July 11, 2012

List - ListButton

ListButton在畫面上會呈現下拉式的選單,本範例是使用者點選ListButton後,出現下拉式選單,當使用者選擇文字後,會在右方顯示圖片。本範例由官網取得。

List - ListView

Pivot的WTK元件中,List屬於可條列許多項目,並且允許使用者進行選擇的元件,它通常會搭配ScrollPane進行捲動顯示的效果。List包含了ListView及ListButton. ListView,ListButton則是按下後會跳出popup選單,讓使用者進行選擇。本文將先介紹ListView元件。

基本上ListView並不具備捲動功能,因此必須將之附屬於ScrollPane元件之中,ScorllPane會自動依據內容的多寡而調整元件的高度,UI設計人員無須介入。更詳細的ScrollPane介紹留待以後說明。本範例由官網取得。

LinkButton

本範例將結合CardPane以及Link Button達成圖片瀏覽的功能。CardPane就如同一疊卡片一般,同一時間只能顯示一張卡片,詳細留待往後說明。本範例由官網取得。

在此ui.bxml中,使用了另一種事件處理機制,用<buttonPressListeners></buttonPressListeners>,也就是將要進行的事件處理撰寫在<buttonPressListeners></buttonPressListeners>區塊中。在範例中所寫的處理機制是要設定選擇了在CardPane中的哪一個card。

CheckBox

本文將介紹CheckBox元件,當使用者按了CheckBox之後,會顯示出圖片。本範例由官網取得。

在ui.bxml中要特別一提的是,使用ButtonPressListener.buttonPressed的方式來定義事件處理機制,在bxml中是以java script來撰寫事件處理(當然,在Java原始碼中進行事件處理也可以)。同時,本範例是以TablePane來排列元件,詳細TablePane說明留待以後說明。

Tuesday, July 10, 2012

Radio Button

本範例和Push Button範例相同,都必須建立客制化的Window類別,並實作Bindable介面,在本文中它被稱為RBWindows,同時它也放置在myex的套件中(myex#RBWindows)。

在這個範例(由官網取得)中,我們針對3個RadioButton建立了一個群組(ButtonGroup)稱為numbers。同時在它們下方有一個PushButton,按下它會以Alert顯示出哪一個RadioButton是被選取的。

Toggle Button

Toggle Button顧名思義,表示它可以是某項行為的開關!當按下之後,按鈕本身會呈現凹陷的狀態,若再按一次則會回復成原狀!

在以下的範例(由官網取得)中,使用了org.apache.pivot.wtk.content.ButtonData物件來描述按鈕的文字及圖示(icon)。

PushButton、事件處理與中文

本篇文章將介紹如何使用BXML建立Push Button並且實作它的事件處理機制,同時也會對中文字的顯示有不同的處理方式。

本專案(由官網取得)可分成二個部份來說明,首先ui.bxml會利用到自訂的命名空間(namespace)-> myex,也因此會在專案中新增一個package名稱為myex,在myex中會建立一個類別PushButtons,它是自訂的Window類別,同時也繼承了Bindable介面,專門用來和使用者介面中的Push Button進行對應,包含了事件處理。

第二部份則是會將ui.bxml放在根目錄底下,它會引用到myex套件中所定義的自訂Window類別PushButtons。另外,程式的進入點仍是NewClass.java,此類別會讀取ui.bxml,並且經由序列化的處理將Window對應到PushButtons。

Lables及ImageView


在pivot專案(由官網取得)中撰寫如下bxml檔案,用來設計UI。

<!--ui.bxml-->
<Window title="Labels" maximized="true"
    xmlns:bxml="http://pivot.apache.org/bxml"
    xmlns="org.apache.pivot.wtk">
    <BoxPane styles="{padding:4, verticalAlignment:'center'}">
        <ImageView image="/clock.png"/>
        <Label text="現在的時間是?" styles="{font:'PMingLiU bold 24'}"/>
    </BoxPane>
</Window>