2016-03-23 8 views
-2

私は、ユーザーからテキストを受け取っているアプリケーションをjLabelに入れています。私はそれが問題だと思ったので、いくつかのトラブルシューティングの後、私はプログラムの最も時間のかかる部分を分離しました。JLabel setTextに時間がかかりすぎています

text1.setText(arg2); 

ここで、arg2は長い文字列です。テストで私は9000行を使用しています。 HTMLでも書式設定されています。私は時間がかかることがあり、数秒かかると思うところでは、3分35秒という膨大な時間がかかります。私はJTextAreaにしても同様の問題を持ってここにいくつかの質問を発見した:

https://stackoverflow.com/questions/23951118/jtextarea-settextverylongstring-is-taking-too-much-time

しかし、私はこの問題への解決策を適用する方法を見つけることができません。これには解決策がありますか?

EDIT - 私のコードは以下の通りです。注意簡潔にするために、文字列の中央部分を切り取っています。

import java.io.*; 
import java.lang.*; 
import javax.swing.*; 
public class jLabelIssue { 
    public static void main(String[] args) { 
     final JFrame frame = new JFrame("Comparinger use this to compare things and stuff"); 
     frame.setSize(268, 150); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     JLabel text1 = new JLabel(); 
     frame.add(text1); 
     arg2 = 
     "<HTML><font color=black>" + 
     "a<br/>" + 
     "a<br/>" + 
     "a<br/>" + 
     //... 9000 more lines of this ... 
     "a<br/>" + 
     "a<br/>" + 
     "a<br/>" + 
     "</font></HTML>"; 
     text1.setText(arg2); 
     frame.repaint(); 
    } 
} 
+6

、[MCVE]まともを作成して投稿してください。詳細を知るには、この重要なリンクをお読みください。 –

+1

**あなたが提供したリンクには、私が意味するものの例があり、[sscce](http://sscce.org/)としても知られています。 –

+4

'テストで私は9000行を使用していました。 HTMLでもフォーマットされています.JLabelは9000行のテキストを表示するようには設計されていませんでした。一度にすごく長い文字列を作成するという点は何ですか?一度に1行を描画するには、JLIstのようなものを使うべきでしょう。あるいは、JEditorPaneのように、HTML用に設計された、より適切なコンポーネントを試してみてください。 – camickr

答えて

1

プログラムはKDiff3のようなもので、それは簡単に鑑賞するために、カラーコードを、コンフィギュレーション・ファイルであるユーザ入力を読み出します。

HTMLを使用しないでください。常にHTMLの解析に費やしています。

単純なテキストを属性とともに使用してください。これは、JTextPaneを使用して、必要なテキストを色分けします。

9600行のJavaソースファイルで構文の強調表示を数秒で完了しました。そしてその論理は、テキストのトークンへのすべての解析のために、より複雑になります。

属性を使った演奏の実際の例については、Text Component FeaturesのSwingチュートリアルのセクションを読んでください。

あなたの基本的なロジックのようなものになります:まともな助けに最高のチャンスのために

// Define the basic colors you want to use: 

SimpleAttributeSet colorCode1 = new SimpleAttributeSet(); 
StyleConstants.setForeground(keyWord, Color.RED); 

SimpleAttributeSet colorCode2 = new SimpleAttributeSet(); 
StyleConstants.setForeground(keyWord, Color.YELLOW); 

// Add some text 

JTextPane textPane = new JTextPane(); 
StyledDocument doc = textPane.getStyledDocument(); 

try 
{ 
    doc.insertString(doc.getLength(), "\nA line of text", colorCode1); 
    doc.insertString(doc.getLength(), "\nAnother line of text", colorCode2); 
} 
catch(Exception e) {} 
+0

これは使えましたが、時間を節約できませんでした。 jEditorPaneは9分かかり、JTextPaneは6分かかりました。私はこれを閉じている。 – Goff

+0

あなたがコードを投稿していないことを考えると、私たちはこれ以上ヘルプを提供することはできません。私が言ったように、9600行のコードを強調表示するのに数秒しかかかりません。あなたは間違ったことをしているに違いない。 – camickr

関連する問題