Hi,
I do initialize JLanguageTool with the following code:
private JLanguageTool lt;
private String[] disabledRules = new String[0];
private String[] enabledRules = new String[0];
public JLanguageToolEngine() {
this(Language.ITALIAN, Language.ITALIAN);
}
@SuppressWarnings("deprecation")
public JLanguageToolEngine(Language language, Language motherTongue) {
language.getSentenceTokenizer().setSingleLineBreaksMarksParagraph(true);
motherTongue.getSentenceTokenizer().setSingleLineBreaksMarksParagraph(true);
try {
lt = new JLanguageTool(language , motherTongue );
lt.activateDefaultPatternRules();
lt.activateDefaultFalseFriendRules();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
Tools.selectRules(lt, disabledRules, enabledRules);
lt.setListUnknownWords(true);
}
public void dispose() {
JLanguageTool.removeTemporaryFiles();
}
==============================================
Problem is: if I call
final List<RuleMatch> ruleMatches = lt.check(contents);
==============================================
“too early” (i.e.: almost immediately after construction) I get an Exception:
Exception in thread “org.eclipse.jface.text.reconciler.MonoReconciler” java.nio.InvalidMarkException
at java.nio.Buffer.reset(Unknown Source)
at morfologik.speller.Speller.charsToBytes(Speller.java:178)
at morfologik.speller.Speller.CharSequenceToBytes(Speller.java:192)
at morfologik.speller.Speller.isInDictionary(Speller.java:203)
at org.languagetool.rules.spelling.morfologik.MorfologikSpellerRule.getRuleMatch(MorfologikSpellerRule.java:125)
at org.languagetool.rules.spelling.morfologik.MorfologikSpellerRule.match(MorfologikSpellerRule.java:98)
at org.languagetool.JLanguageTool.checkAnalyzedSentence(JLanguageTool.java:639)
at org.languagetool.JLanguageTool.check(JLanguageTool.java:564)
at org.languagetool.JLanguageTool.check(JLanguageTool.java:514)
at it.condarelli.texteditor.spelling.JLanguageToolEngine.check(JLanguageToolEngine.java:61)
at it.condarelli.texteditor.spelling.JLanguageToolReconcileStrategy.checkSpelling(JLanguageToolReconcileStrategy.java:17)
at it.condarelli.texteditor.spelling.SpellingReconcileStrategy.reconcile(SpellingReconcileStrategy.java:147)
at it.condarelli.texteditor.spelling.SpellingReconcileStrategy.initialReconcile(SpellingReconcileStrategy.java:130)
at org.eclipse.jface.text.reconciler.MonoReconciler.initialProcess(MonoReconciler.java:105)
at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:173)
inserting a delay in the form (50ms seem to be about the minimum on my machine):
Thread.sleep(50);
==============================================
Everything works fine.
What am I missing?
Is there some way to check when JLanguageTool is ready to accept check() commands?
Regards
Mauro