2013-03-21 4 views
5

私は奇妙な振る舞いをするアプレットを開発しています。これは通常の「ブラウザでアプレットを開始できません」という問題ではなく、もっと微妙なものです。アプレット隠しクラスなし例外

アプレットは、8つのタブを持つjtabbedpaneで構成されています。それぞれのタブは、ワークフローでデータ操作を行い、タブを循環する2つのボタン(前後)を備えています。

私はブラウザ(最新のクロムまたはFirefoxでこれを実行しても問題ありません)を実行すると、7番目のタブから8番目のタブに渡すときに一貫して減速することがわかります。後者では、カスタムテーブルモデルそのタブと日食でそれはうまく動作します。私は、jvmが私のカスタムテーブルモデルであるRateTableModelクラスのためのclassnotfoundexceptionをスローすることに気付きました。奇妙なのは、アプレットをIDEでテストしても、ブラウザに自己署名されたアプレットとしてテストしても、例外はどのコンソールでもスローされないことです。私はどこでも確認しました:空のcatchブロックはありません。すべての例外は常にstackstraceが出力され、例外が捕捉されないtry/catchブロックに私のtablemodelの初期化コードを入れます。さらに面白いのは、何も起こらなかったかのように実行時間がランダムである(今度はIDEでのみ)のと同じですが、ブラウザではGUIが通常の例外のように機能します。

なぜこのようなことが起こったのかについて私が尋ねたいことは何ですか。

RateTableModelクラスは、geotel.utilsパッケージにあります。このクラスには、このクラスをロードする前に定期的にインスタンス化する他のクラスがあり、このクラスがjarファイルに存在することを確認しました。開発に

詳細(多分読んでいる人のために、これは便利です):

アプレットは、アプレットは、次のHTMLファイルから実行される

jarsigner -keystore keystore3 C:\GestioneOneri.jar me3 

コマンドを使用して署名されています

<?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" 
    href="http://java.sun.com/products/autodl/j2se" /> 
      <jar href="GestioneOneri.jar" main="true" /> 
     <jar href="mysql-connector-java-5.1.20-bin.jar"/> 
     <jar href="poi-3.9-20121203.jar"/> 
     <jar href="forms-1.3.0.jar"/> 
     </resources> 
     <applet-desc 
      name="Gestione Oneri Urbanistici" 
      main-class="geotel.gui.Login" 
      width="1024" 
      height="700"/> 
    </jnlp> 
0123:
<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> 

JNLPファイルは以下のとおりです。

this.tm = new geotel.utils.RateTableModel(columnNames, oneriPratica, rate, rateizzazioniPreviste); 

とクラスRateTableModelの定義は

public class RateTableModel extends AbstractTableModel 

EDITがあるDatiRatePanel クラス:ClassNotFoundExceptionが発生し

コードは次のようである以上、いくつかのデバッグ手順の後、私はことがわかりましたデバッグビューにはスクリーンショットの状況があります Debug

私は絶対に持っていません私がF5キーを押し続けるとそのキーが消えてしまうので、実行が続くと、クラスローダーは魔法のようにRateTableModelクラスを見つけることができます。どうすればこれを取り除くことができますか?

ありがとうございました!

EDIT2:Eclipseのドキュメントのキーアイコンを少し調べて、ロックされたオブジェクトのモニターであることがわかりました。私が知る限り、ここにはない同期コードブロックがある場所にモニターが表示されます(これらのブロックは呼び出されないと確信しています)。それは私を怒らせている...

EDIT3:各命令がどれくらい時間がかかるかについて、いくつかのprintlnsを入れようとしましたが、次にソースコードと出力があります。私はなぜ時間が "リセット"されているのか分かりません(あるいはそう思われます)。プリント2と4では、時間変数が初期化されていないスレッドがたくさんあるようです。

Long time = System.currentTimeMillis(); 
this.tm = new RateTableModel(columnNames, oneriPratica, rate, rateizzazioniPreviste); 
time = System.currentTimeMillis() - time; 
System.out.println("DatiRatePanel2.populatePanel() 1 time: " + time); 
rateTable = new MyTable(tm, columnModel, this); 
time = System.currentTimeMillis() - time; 
System.out.println("DatiRatePanel2.populatePanel() 2 time: " + time); 
table = new ExcelAdapter(rateTable); 
time = System.currentTimeMillis() - time; 
System.out.println("DatiRatePanel2.populatePanel() 3 time: " + time); 
scrollPane = new JScrollPane(rateTable); 
time = System.currentTimeMillis() - time; 
System.out.println("DatiRatePanel2.populatePanel() 4 time: " + time); 
scrollPane.getVerticalScrollBar().setUnitIncrement(10); 
this.add(scrollPane, "1, 3, fill, fill"); 
aggiornaTotali(); 
this.invalidate(); 
this.validate(); 
this.repaint(); 
time = System.currentTimeMillis() - time; 
System.out.println("DatiRatePanel2.populatePanel() 5 time: " + time); 

出力:

DatiRatePanel2.populatePanel() 1 time: 2 
DatiRatePanel2.populatePanel() 2 time: 1364288266968 
DatiRatePanel2.populatePanel() 3 time: 2 
DatiRatePanel2.populatePanel() 4 time: 1364288266969 
DatiRatePanel2.populatePanel() 5 time: 3 

EDIT4:Javaプラグインコンソールでレベル5活性化し、これは私が得たものである:

DettagliPratichePanel.updateObjects() impostazione oneri 
network: Connessione a http://192.168.146.145:8080/GestioneOneriServlet/findWhereNomeConfigurazioneEqualsConfRateizzazioni con proxy=DIRECT 
network: Connessione a http://192.168.146.145:8080/GestioneOneriServlet/findWhereNomeConfigurazioneEqualsConfRateizzazioni con proxy=DIRECT 
network: Connessione a http://192.168.146.145:8080/GestioneOneriServlet/findWhereNomeConfigurazioneEqualsConfRateizzazioni con proxy=DIRECT 
network: Connessione a http://192.168.146.145:8080/GestioneOneriServlet/findWhereNomeConfigurazioneEqualsConfRateizzazioni con proxy=DIRECT 
network: Connessione a http://192.168.146.145:8080/GestioneOneriServlet/findByConfRateizzazioniConfRata con proxy=DIRECT 
network: Connessione a http://192.168.146.145:8080/GestioneOneriServlet/findByConfRateizzazioniConfRata con proxy=DIRECT 
network: Connessione a http://192.168.146.145:8080/GestioneOneriServlet/findByConfRateizzazioniConfRata con proxy=DIRECT 
network: Connessione a http://192.168.146.145:8080/GestioneOneriServlet/findByConfRateizzazioniConfRata con proxy=DIRECT 
DettagliPratichePanel.updateObjects() polizza 
basic: JNLP2ClassLoader.findClass: geotel.utils.RateTableModel: try again .. 
DatiRatePanel2.populatePanel() 1 time: 2 
DatiRatePanel2.populatePanel() 3 time: 1364309403101 
DatiRatePanel2.populatePanel() 4 time: 3 
DatiRatePanel2.populatePanel() 5 time: 1364309403102 
basic: JNLP2ClassLoader.findClass: geotel.utils.MyTable$ButtonsCellRenderer: try again .. 
------------------------------------------------------------------------ Here starts trouble 
network: Connessione a http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar con proxy=DIRECT 
network: Connessione a http://192.168.146.129:8091/ con proxy=DIRECT 
network: Connessione http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar con cookie "__ac="Qt/t/I4Nt7/qj0H5vhUrqR+ZrJYgcHJvZ2V0dGlzdGEx"; _ZopeId="97847822A52RRctuIzM"" 
network: CleanupThread used 1 us 
network: Scaricamento risorsa: http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar 
    Content-Length: 1.940.942 
    Content-Encoding: null 
network: URL http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar scritto su file C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-15459ea4-temp 
security: File lista librerie sicure non trovato 
cache: Create from verifier: JarSigningData{hasOnlySignedEntries=true, hasSingleCodeSource=true, hasMissingSignedEntries=false} 
network: CleanupThread used 2 us 
cache: Replacing MemoryCache entry (cnt=2) for http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jarwas=com.sun.deploy.cache.CacheEntry (29348568) now=com.sun.deploy.cache.CacheEntry (24374818) 
network: Connessione a http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar con proxy=DIRECT 
network: Connessione a http://192.168.146.129:8091/ con proxy=DIRECT 
network: Connessione http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar con cookie "__ac="Qt/t/I4Nt7/qj0H5vhUrqR+ZrJYgcHJvZ2V0dGlzdGEx"; _ZopeId="97847822A52RRctuIzM"" 
network: CleanupThread used 1 us 
network: Scaricamento risorsa: http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar 
    Content-Length: 1.940.942 
    Content-Encoding: null 
network: URL http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar scritto su file C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-27c7ae17-temp 
security: File lista librerie sicure non trovato 
cache: Create from verifier: JarSigningData{hasOnlySignedEntries=true, hasSingleCodeSource=true, hasMissingSignedEntries=false} 
network: CleanupThread used 1 us 
cache: Replacing MemoryCache entry (cnt=3) for http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jarwas=com.sun.deploy.cache.CacheEntry (24374818) now=com.sun.deploy.cache.CacheEntry (8045053) 

-------------------------------------This block is repeated at least 30 times before this 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\23\5d616017-2432b323 
cache: MemoryCache: removed entry http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-515e0fde 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-515e0fde 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-642e11c6 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-642e11c6 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-36c18954 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-36c18954 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-3dd37d44 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-3dd37d44 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-74a8c32b 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-74a8c32b 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-2278e899 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-2278e899 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-36a95dca 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-36a95dca 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-15459ea4 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-15459ea4 
cache: Create from verifier: JarSigningData{hasOnlySignedEntries=true, hasSingleCodeSource=true, hasMissingSignedEntries=false} 
network: CleanupThread used 2 us 
cache: Adding MemoryCache entry: http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar 
network: Connessione a http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar con proxy=DIRECT 
network: Connessione a http://192.168.146.129:8091/ con proxy=DIRECT 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\23\5d616017-1cffa7d0 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\14\39df63ce-72747a9e 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\15\7e499c8f-55d9e14b 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\23\5d616017-1ff05f86 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\14\39df63ce-3623cf5c 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\15\7e499c8f-767f4e5c 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-78a94a0b 
network: Connessione http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar con cookie "__ac="Qt/t/I4Nt7/qj0H5vhUrqR+ZrJYgcHJvZ2V0dGlzdGEx"; _ZopeId="97847822A52RRctuIzM"" 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-16cf3e35 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\14\39df63ce-3d8f935b 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\15\7e499c8f-2b757fb1 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\23\5d616017-65139493 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\14\39df63ce-1d5deb21 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\15\7e499c8f-3a4f46c6 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-48a86fb3 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-4b1ec669 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\23\5d616017-1c1ed2e1 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\14\39df63ce-35f43fda 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\15\7e499c8f-14bf2ddf 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-10a0c30f 
network: CleanupThread used 1 us 
network: Scaricamento risorsa: http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar 
    Content-Length: 1.940.942 
    Content-Encoding: null 
network: URL http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar scritto su file C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-203bfb91-temp 
security: File lista librerie sicure non trovato 
cache: Create from verifier: JarSigningData{hasOnlySignedEntries=true, hasSingleCodeSource=true, hasMissingSignedEntries=false} 
network: CleanupThread used 1 us 
cache: Replacing MemoryCache entry (cnt=3) for http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jarwas=com.sun.deploy.cache.CacheEntry (20330403) now=com.sun.deploy.cache.CacheEntry (8313353) 
cache: MemoryCache: removed entry http://192.168.146.129:8091/Scia/sportello-unico-edilizia/archivio-pratiche-edilizie/permesso_di_costruire.2012-10-25.0455740504/portal_url/++resource++java/GestioneOneri.jar 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-25fd39ec 
cache: Closing CachedJarFile C:\Users\Andrea\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\51\58374d33-25fd39ec 

私がここに理解できることであるというクラスローダ後内部クラスButtonsCellRendererを検索すると、このフラッディングが開始されます(これにより、Javaコンソールを含むWebページのすべてがブロックされます)。この問題は、それが内部クラスであるという事実によって引き起こされる可能性がありますか?

Joop Eggenが尋ねるように、私は私のJTableのコードを投稿しています。 パッケージgeotel.utils;

import geotel.configuration.Configuration; 
import geotel.gui.DatiPersonaliPanel; 
import geotel.gui.DatiRatePanel2; 
import geotel.gui.GestionePratichePanel; 
import geotel.gui.IManager; 
import geotel.gui.ImportazionePanel; 

import java.awt.Color; 
import java.awt.Component; 
import java.awt.GridLayout; 
import java.awt.Image; 
import java.awt.Toolkit; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.net.URL; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JPanel; 
import javax.swing.JTable; 
import javax.swing.ListSelectionModel; 
import javax.swing.table.TableCellRenderer; 
import javax.swing.table.TableColumnModel; 
import javax.swing.table.TableModel; 

public class MyTable extends JTable 
{ 
class ButtonsCellRenderer extends JPanel implements TableCellRenderer 
{ 
    private static final long serialVersionUID = -4945689480058875463L; 

    public Component getTableCellRendererComponent(final JTable table, Object value, boolean isSelected, boolean hasFocus, final int row, int column) 
    { 
     this.setLayout(new GridLayout(1, 1)); 
     if(gestione instanceof ImportazionePanel) 
     { 
      if(column == 0) 
      { 
       URL editUrl = getClass().getResource("/resource/images/051.gif"); 
       Image editImage = Toolkit.getDefaultToolkit().getImage(editUrl); 
       JButton edit = new JButton(new ImageIcon(editImage)); 
       edit.setBorderPainted(false); 
       edit.setContentAreaFilled(false); 
       edit.setFocusPainted(false); 
       edit.setOpaque(false); 
       this.add(edit); 
      } 
      else 
      { 
       new Exception("else non gestito").printStackTrace(); 
      } 
     } 
     else 
     { 
      if(column == 0) 
      { 
       URL editUrl = getClass().getResource("/resource/images/005.gif"); 
       Image editImage = Toolkit.getDefaultToolkit().getImage(editUrl); 
       JButton editB = new JButton(new ImageIcon(editImage)); 
       editB.setBorderPainted(false); 
       editB.setContentAreaFilled(false); 
       editB.setFocusPainted(false); 
       editB.setOpaque(false); 
       if(gestione instanceof GestionePratichePanel) 
       { 
        if(Configuration.getRuoloUtenteConnesso().getModificaPratica()) 
        { 
         if(edit) 
          editB.setEnabled(true); 
         else 
          editB.setEnabled(false); 
        } 
        else 
         editB.setEnabled(false); 
       } 
       else if(gestione instanceof DatiRatePanel2) 
       { 
        if(getValueAt(row, 5) != null && !getValueAt(row, 5).equals("")) 
         editB.setEnabled(false); 
        else if(Configuration.getRuoloUtenteConnesso().getModificaPagamento()) 
        { 
         if(edit) 
          editB.setEnabled(true); 
         else 
          editB.setEnabled(false); 
        } 
        else 
         editB.setEnabled(false); 
       } 
       else if(gestione instanceof DatiPersonaliPanel) 
       { 
        if(edit) 
         editB.setEnabled(true); 
        else 
         editB.setEnabled(false); 
       } 
       this.add(editB); 
      } 
      else 
      { 
       URL removeUrl = getClass().getResource("/resource/images/003.gif"); 
       Image removeImage = Toolkit.getDefaultToolkit().getImage(removeUrl); 
       JButton remove = new JButton(new ImageIcon(removeImage)); 
       remove.setBorderPainted(false); 
       remove.setContentAreaFilled(false); 
       remove.setFocusPainted(false); 
       remove.setOpaque(false); 
       if(gestione instanceof GestionePratichePanel) 
       { 
        if(Configuration.getRuoloUtenteConnesso().getEliminaPratica()) 
        { 
         if(edit) 
          remove.setEnabled(true); 
         else 
          remove.setEnabled(false); 
        } 
        else 
         remove.setEnabled(false); 
       } 
       else if(gestione instanceof DatiRatePanel2) 
       { 
        if(getValueAt(row, 5) != null && !getValueAt(row, 5).equals("")) 
         remove.setEnabled(false); 
        else if(Configuration.getRuoloUtenteConnesso().getEliminaPagamento()) 
        { 
         if(edit) 
          remove.setEnabled(true); 
         else 
          remove.setEnabled(false); 
        } 
        else 
         remove.setEnabled(false); 
       } 
       else if(gestione instanceof DatiPersonaliPanel) 
       { 
        if(edit) 
         remove.setEnabled(true); 
        else 
         remove.setEnabled(false); 
       } 
       this.add(remove); 
      } 
     } 
     return this; 
    } 
} 

class MyTableButtonMouseListener implements MouseListener 
{ 
    private JTable ptable; 

    public MyTableButtonMouseListener(JTable table) 
    { 
     ptable = table; 
    } 

    private void forwardEventToButton(MouseEvent e) 
    { 
     TableColumnModel columnModel = ptable.getColumnModel(); 
     int column = columnModel.getColumnIndexAtX(e.getX()); 
     int row = e.getY()/ptable.getRowHeight(); 
     int value; 

     if(gestione instanceof ImportazionePanel) 
     { 
      if(row < ptable.getRowCount() && row >= 0 && column >= 0 && column < 1) 
      { 
       ((ImportazionePanel) gestione).importSelected((String) ptable.getValueAt(row, 1)); 
       ptable.repaint(); 
      } 
     } 
     else 
     { 
      if(row < ptable.getRowCount() && row >= 0 && column >= 0 && column < 2) 
      { 
       try 
       { 
        value = (Integer) ptable.getValueAt(row, 2); 
        switch(column) 
        { 
         case 0: 
         { 
          gestione.editAction(value); 
          break; 
         } 
         case 1: 
         { 
          gestione.deleteAction(value); 
          break; 
         } 
         default: 
          break; 
        } 
        ptable.repaint(); 
       } 
       catch(Exception e1) 
       { 
        e1.printStackTrace(); 
       } 
      } 
     } 
    } 

    public void mouseClicked(MouseEvent e) 
    { 
     forwardEventToButton(e); 
    } 

    public void mouseEntered(MouseEvent e) 
    { 
    } 

    public void mouseExited(MouseEvent e) 
    { 
    } 

    public void mousePressed(MouseEvent e) 
    { 
    } 

    public void mouseReleased(MouseEvent e) 
    { 
    } 
} 

private static final long serialVersionUID = 3591458853529380099L; 

protected IManager gestione; 
protected TableModel tm; 
protected boolean edit; 

public MyTable() 
{ 
    super(); 
    this.setBackground(new Color(244, 244, 244)); 
    this.setShowHorizontalLines(true); 
    this.setShowVerticalLines(true); 
    this.getTableHeader().setReorderingAllowed(false); 
    this.setRowSelectionAllowed(true); 
    this.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 
    this.setFillsViewportHeight(true); 
    this.addMouseListener(new MyTableButtonMouseListener(this)); 
} 

public MyTable(TableModel tm, TableColumnModel columns, IManager gestione, boolean edit) 
{ 
    super(tm, columns); 
    this.tm = tm; 
    this.gestione = gestione; 
    this.edit = edit; 
    // this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
    this.setBackground(new Color(244, 244, 244)); 
    this.setShowHorizontalLines(true); 
    this.setShowVerticalLines(true); 
    this.getTableHeader().setReorderingAllowed(false); 
    this.setRowSelectionAllowed(true); 
    this.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 
    this.setFillsViewportHeight(true); 
    this.addMouseListener(new MyTableButtonMouseListener(this)); 
} 

public TableCellRenderer getCellRenderer(int row, int column) 
{ 
    if(this.gestione instanceof ImportazionePanel) 
    { 
     if(column < 1) 
     { 
      return new ButtonsCellRenderer(); 
     } 
     else 
      return super.getCellRenderer(row, column); 
    } 
    else 
    { 
     if(column < 2) 
     { 
      return new ButtonsCellRenderer(); 
     } 
     else 
     { 
      return super.getCellRenderer(row, column); 
     } 
    } 
} 

public RataTableRow getRowObjectByIndex(int row) 
{ 
    if(gestione instanceof DatiRatePanel2) 
    { 
     return ((RateTableModel) tm).getRowObjectByIndex(row); 
    } 
    return null; 
} 

public Object[] getRowObjectById(Integer id) 
{ 
    Object[] ret = null; 
    for(int i = 0; i < tm.getRowCount(); i++) 
    { 
     if(tm.getValueAt(i, 2).equals(id)) 
     { 
      ret = new Object[tm.getColumnCount()]; 
      for(int j = 0; j < tm.getColumnCount(); j++) 
       ret[j] = tm.getValueAt(i, j); 
      break; 
     } 
    } 
    return ret; 
} 

public Component prepareRenderer(TableCellRenderer renderer, int Index_row, int Index_col) 
{ 
    Component comp = super.prepareRenderer(renderer, Index_row, Index_col); 
    // even index, selected or not selected 
    if(Index_row % 2 == 0) 
    { 
     if(!isCellSelected(Index_row, Index_col)) 
      comp.setBackground(new Color(240, 240, 240)); 
     else 
     { 
      comp.setForeground(Color.black); 
      comp.setBackground(Color.green); 
     } 
    } 
    else 
    { 
     if(!isCellSelected(Index_row, Index_col)) 
      comp.setBackground(Color.white); 
     else 
     { 
      comp.setForeground(Color.black); 
      comp.setBackground(Color.green); 
     } 
    } 
    return comp; 
} 
} 
+0

jotelに追加されていないgeotel.utils.RateTableModelクラス内にいくつかの依存関係が存在する可能性があります。このクラスによってインポートされたクラスを確認し、1つずつ削除し、 。 – fmodos

+0

あなたの返事ありがとうございました(私は前にそれを見ていませんでした)。インポートされたすべてのクラスがjarファイル内にあるかどうかを確認します。とにかく私はあなたに物事を尋ねたいと思います:もし瓶が今働いていなければ、輸入されたクラスを1つずつ取り除くとどうしたらうまくいくのでしょうか?私は既にクラスノットファウンデーションの授業があるのですが、別のクラスを追加していないと思いますか? – Andrea

+0

import geotel.dao.factory.RataDaoFactory; import geotel.domain.OnerePratica; import geotel.domain.Rata; import geotel.domain.RateizzazionePrevista; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import javax.swing.table.AbstractTableModel; これは完全なインポートリストです。my classes(package geotel。*)はすべてjarファイル内にあります。他のクラスはjvmに存在しなければならない標準のJavaクラスです。 – Andrea

答えて

1

:(特に/コントロールパネル/ javaの/ [全般]タブをオフにjar downloaded multiple times 私のアプレットの問題の中で、私は回答のいずれかの手順に従っこれと同様のものがあったので、一時的なインターネットファイル/私のコンピュータ上の一時的なインターネットファイルを保持)と何かを推測...複数のダウンロードの問題はなくなり、少なくともブラウザでは、UIがフリーズする原因となった例外もなくなっているようだ。私は今、何が起きているかをEclipseデバッガで試してみるつもりです。 誰でも最後の2つの投稿の意味を説明できますか?キャッシュフィルタを設定するtomcatについて。それをどうやって確認できますか?私はWiresharkで何を探すべきですか? ありがとう

4

いくつかの経験を持つ私の推測では、クラス-見つからない問題がサイドの問題、デバッグ環境、クラスローディング情報、最初のロードまたはこれから派生していること、です。

テーブルモデルでは、誤ってTreeNodeがすべての子TreeNodeを再帰的にインスタンス化するTreeModelのように、大きなペナルティが発生することがあります。

私は最初に同様の動作を探します。多分あなたのテーブルモデルクラスをプロファイリングします。可能であれば、いくつかのタブを切り替えて、以前のタブにクリーンアップコードがあるかどうかを確かめます。

私が見ることができるように、あなたはアプレットでJDBCを使用しています。これはコストがかかるため、すべてのSQL呼び出しを確実にログに記録します。

具体的な回答ではありませんが、私が部分的に正しい(シャルラタンの明確な鮮やかなような)かどうかは不思議です。拡張された質問コードの後


問題はレンダラにあまりにも多くの仕事を持っています。 次の操作を行います。 もっとコンパクトに書くことができました。

まだ疑わしいものは、古いJButton.isEnabled()が元とこのコードで維持されていることです。

私はこのスレッドを見つけ、ネット上でさまよう
private JButton editB = new JButton(); 
private final Icon ICON_051; 
private final Icon ICON_005; 
private final Icon ICON_003; 

public ButtonsCellRenderer() 
{ 
    { 
     URL editUrl = getClass().getResource("/resource/images/051.gif"); 
     Image editImage = Toolkit.getDefaultToolkit().getImage(editUrl); 
     ICON_051 = new ImageIcon(editImage); 
    } 
    { 
     URL editUrl = getClass().getResource("/resource/images/005.gif"); 
     Image editImage = Toolkit.getDefaultToolkit().getImage(editUrl); 
     ICON_005 = new ImageIcon(editImage); 
    } 
    { 
     URL editUrl = getClass().getResource("/resource/images/003.gif"); 
     Image editImage = Toolkit.getDefaultToolkit().getImage(editUrl); 
     ICON_003 = new ImageIcon(editImage); 
    } 
    this.setLayout(new GridLayout(1, 1)); 
    editB.setBorderPainted(false); 
    editB.setContentAreaFilled(false); 
    editB.setFocusPainted(false); 
    editB.setOpaque(false); 
    this.add(editB); 
} 

public Component getTableCellRendererComponent(final JTable table, Object value, boolean isSelected, boolean hasFocus, final int row, int column) 
{ 
    if(gestione instanceof ImportazionePanel) 
    { 
     if(column == 0) 
     { 
      editB.setIcon(ICON_051); 
     } 
     else 
     { 
      new Exception("else non gestito").printStackTrace(); 
     } 
    } 
    else 
    { 
     boolean enabled = editB.isEnabled(); 
     if(column == 0) 
     { 
      editB.setIcon(ICON_005); 
      if(gestione instanceof GestionePratichePanel) 
      { 
       enabled = Configuration.getRuoloUtenteConnesso().getModificaPratica() && edit; 
      } 
      else if(gestione instanceof DatiRatePanel2) 
      { 
       if(getValueAt(row, 5) != null && !getValueAt(row, 5).equals("")) 
        enabled = false; 
       else 
        enabled = Configuration.getRuoloUtenteConnesso().getModificaPagamento() && edit; 
       else 
        enabled = false; 
      } 
      else if(gestione instanceof DatiPersonaliPanel) 
      { 
       enabled = edit; 
      } 
     } 
     else 
     { 
      editB.setIcon(ICON_003); 
      if(gestione instanceof GestionePratichePanel) 
      { 
       enabled = Configuration.getRuoloUtenteConnesso().getEliminaPratica() && edit; 
      } 
      else if(gestione instanceof DatiRatePanel2) 
      { 
       if(getValueAt(row, 5) != null && !getValueAt(row, 5).equals("")) 
        enabled = false; 
       else 
        enabled = Configuration.getRuoloUtenteConnesso().getEliminaPagamento() && edit; 
      } 
      else if(gestione instanceof DatiPersonaliPanel) 
      { 
       eenabled = true; 
      } 
     } 
     editB.setEnabled(enabled); 
    } 
    return this; 
} 
+0

「テーブルモデルクラスのプロファイリング」とはどういう意味ですか? – Andrea

+0

繰り返し動作が遅くなることがあります。たとえば、行のフェッチが遅いすべての列に対して行を繰り返しフェッチします。 –

+0

あなたが気づいたかどうかわかりませんが、詳細なJVMログを置く「EDIT4」セクションを追加しました。何を想像してみてください。約30回繰り返された操作があります。あなたはそれが何であり、それを取り除く方法を知っていますか? – Andrea

関連する問題