我正在开发一个行为奇怪的applet:这不是通常的"我无法在浏览器中启动我的applet"问题,而是更微妙的东西.
applet包含一个带有8个选项卡的jtabbedpane,每个选项卡在工作流中执行一些数据操作,用户有两个按钮(后退和前进)循环选项卡.
当我将它运行到浏览器(最新的chrome或firefox,但这没关系)时,我注意到从第7个选项卡传到第8个选项卡时一致的减速:在后者中,我在该选项卡中放置了一个带有自定义tablemodel的jtable,在日食中它运行得很好.稍后我会注意到jvm会为类RateTableModel抛出一个classnotfoundexception,这是我的自定义tablemodel.奇怪的是,即使我在IDE中测试applet,也作为自签名applet在浏览器中测试异常从未在任何控制台中抛出.我在任何地方都进行了验证:没有空的catch块,每个异常都会始终打开stackstrace,如果我将tablemodel的初始化代码放在try/catch块中,那么异常永远不会被捕获.
我想问的是有关为什么会发生这种情况的任何想法.
RateTableModel类位于geotel.utils包中,在我必须加载这个类之前,我有其他类我经常实例化,并且我验证了这个类存在于jar中.
有关开发的详细信息(可能对于那些阅读此内容的人可能很有用):
使用该命令对applet进行签名
jarsigner -keystore keystore3 C:\GestioneOneri.jar me3
Run Code Online (Sandbox Code Playgroud)
applet从以下html文件运行:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Titolo</title>
</head>
<body>
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = {code:'geotel.gui.Login.class',
archive:'GestioneOneri.jar,mysql-connector-java-5.1.20-bin.jar,poi-3.9-20121203.jar,forms-1.3.0.jar',
width:1024, height:700} ;
var parameters = {jnlp_href:'gestioneoneri.jnlp', portalUrl:'http://192.168.146.145:8080/GestioneOneriServlet', nomeUtente:'', numeroPratica:'', percorsoFileCalcoloOneri:"/", nomeFileCalcoloOneri:"calcoloOneri.xls"} ;
var version = '1.6' ;
deployJava.runApplet(attributes, parameters, version);
</script>
<noscript>This page requires JavaScript.</noscript>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
JNLP文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp href="gestioneoneri.jnlp">
<information>
<title>Gestione Oneri Urbanistici</title>
<vendor>Geotel soc. coop.</vendor>
<offline-allowed />
</information>
<resources>
<j2se version ="1.6+" initial-heap-size="128m" max-heap-size="1024m" …Run Code Online (Sandbox Code Playgroud)