Discussion:
[問題] Applet執行Comm API發生java.lang.NoCl …
(时间太久无法回复)
小安
2007-07-30 12:52:39 UTC
Permalink
※ 引述《tjpu4 (香吉蒜)》之銘言:
: 想請問在applet上執行comm API的問題
: 寫了一個經由COM1丟字串的程式
: 在DOS環境下執行時 一切正常
: 可是如果改成applet時 卻會發生錯誤
: 以下是用Java主控台的錯誤訊息:
: java.lang.NoClassDefFoundError: javax/comm/CommPortIdentifier
: at TransmitterApplet.init(TransmitterApplet.java:25)
: at sun.applet.AppletPanel.run(Unknown Source)
: at java.lang.Thread.run(Unknown Source)

找不到 class: javax/comm/CommPortIdentifier
: 可是我有把html跟該class檔放在一起啊qq

comm.jar 呢?
: 如果用appletviewer的話
: 會顯示「沒有初始化 applet。」

這個我不清楚,不過不會影響 applet 的執行
: 點選資訊 則是:
: -- 沒有 applet 資訊 --
: -- 沒有參數資訊 --
: 然後關掉檢視器之後 DOS會出現
: Loading Image...
: 請問這是什麼問題呢..?

關鍵是在 "caused by..." 那行,
applet 其實是 sandbox 的概念,

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.78.239
香吉蒜
2007-07-31 04:00:37 UTC
Permalink
※ 引述《tkcn (小安)》之銘言:
: ※ 引述《tjpu4 (香吉蒜)》之銘言:
: 找不到 class: javax/comm/CommPortIdentifier
: : 可是我有把html跟該class檔放在一起啊qq
: comm.jar 呢?
不好意思 我放成comm.jar的捷徑了

所以現在 Java主控台的錯誤訊息就跟appletviewer顯示的錯誤訊息類似了(見下)

那想請問的是
"Caused by...."的錯誤訊息是代表什麼意思呢?

java.lang.ExceptionInInitializerError
at TransmitterApplet.init(TransmitterApplet.java:25)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission javax.comm.properties read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at javax.comm.CommPortIdentifier.<clinit>(CommPortIdentifier.java:678)
... 3 more
: : 如果用appletviewer的話
: : 會顯示「沒有初始化 applet。」
: 這個我不清楚,不過不會影響 applet 的執行
: : 點選資訊 則是:
: : -- 沒有 applet 資訊 --
: : -- 沒有參數資訊 --
: : 然後關掉檢視器之後 DOS會出現
: : http://www2.nkfust.edu.tw/~u9311064/question.JPG
: : 請問這是什麼問題呢..?
: 關鍵是在 "caused by..." 那行,
: applet 其實是 sandbox 的概念,
sandbox的概念是指..?
搜尋網頁也看不太懂

--
謝謝 :)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.18.60.138
小安
2007-07-31 08:42:44 UTC
Permalink
昨天回文時 ptt 速度太慢,
亂按了一些鍵之後就放著沒動了,
沒想到居然還發出去了 Orz

※ 引述《tjpu4 (香吉蒜)》之銘言:
: ※ 引述《tkcn (小安)》之銘言:
: : 找不到 class: javax/comm/CommPortIdentifier
: : comm.jar 呢?
: 不好意思 我放成comm.jar的捷徑了

其實我昨天這樣回答有一點誤導,
雖然錯誤訊息是因為 comm.jar,
但即使放了正確的 library,
這支 applet 程式還是無法執行。

: 所以現在 Java主控台的錯誤訊息就跟appletviewer顯示的錯誤訊息類似了(見下)
: 那想請問的是
: "Caused by...."的錯誤訊息是代表什麼意思呢?
: java.lang.ExceptionInInitializerError
: at TransmitterApplet.init(TransmitterApplet.java:25)
: at sun.applet.AppletPanel.run(Unknown Source)
: at java.lang.Thread.run(Unknown Source)
: Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission javax.comm.properties read)

存取被拒絕,原因就是 sandbox

applet 是用於網頁上的小程式,
基於安全理由,它不允許你做任何的 IO 操作,
(存取本機電腦 及 網路連線...等,只有網頁 server 例外)
否則一旦開了惡意的 applet,
電腦就如同中了木馬一般。

sandbox 的概念就是,
只允許你在盒子裡面操作,
所以無論你在盒子裡做了什麼事,
都不會影響到盒子外的世界。

如果有特殊的需求,
可以使用 sign applet,
再開啟程式前會先出現確認視窗,
待使用者同意後,
程式便能夠有較高的存取權限。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.78.239
香吉蒜
2007-08-01 07:02:02 UTC
Permalink
謝謝 tkcn給了 sign applet這個方向

於是我參照javaworld裡面 sign applet的教學使用keytool及jarsigner
然後製作了Sent.jar與Sent.crt
在html裡 archive=" Sent.jar , comm.jar"
現在applet的確會跳出確認視窗了
可是..
依然不能執行
java 主控台的錯誤訊息為

java.lang.NoClassDefFoundError: Could not initialize class javax.comm.Comm
PortIdentifier
at TransmitterApplet.init(TransmitterApplet.java:26)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

請問這是程式有問題的意思麼?
我的第26行程式為
CommPortIdentifier com = CommPortIdentifier.getPortIdentifier("COM1");


另外一個不解的地方就是
如果使用 appletviewer看html的話
錯誤訊息則是跟沒做 sign applet之前一樣
實在很怪 :(


※ 引述《tkcn (小安)》之銘言:
: ※ 引述《tjpu4 (香吉蒜)》之銘言:
: : 所以現在 Java主控台的錯誤訊息就跟appletviewer顯示的錯誤訊息類似了(見下)
: : 那想請問的是
: : "Caused by...."的錯誤訊息是代表什麼意思呢?
: : java.lang.ExceptionInInitializerError
: : at TransmitterApplet.init(TransmitterApplet.java:25)
: : at sun.applet.AppletPanel.run(Unknown Source)
: : at java.lang.Thread.run(Unknown Source)
: : Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission javax.comm.properties read)
: 存取被拒絕,原因就是 sandbox
: applet 是用於網頁上的小程式,
: 基於安全理由,它不允許你做任何的 IO 操作,
: (存取本機電腦 及 網路連線...等,只有網頁 server 例外)
: 否則一旦開了惡意的 applet,
: 電腦就如同中了木馬一般。
: sandbox 的概念就是,
: 只允許你在盒子裡面操作,
: 所以無論你在盒子裡做了什麼事,
: 都不會影響到盒子外的世界。
: 如果有特殊的需求,
: 可以使用 sign applet,
: 再開啟程式前會先出現確認視窗,
: 待使用者同意後,
: 程式便能夠有較高的存取權限。
嗯嗯 謝謝

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.18.60.138

Loading...