Я НЕ МОЖЕТ предоставить SSCCE, поскольку я не могу сделать ошибку повторяемой за пределами моего большого приложения.ошибка нечеткой ошибки с JViewport.setView
Но вот фрагмент и выход:
if (vp != null) {
try {
starterModule.writePaneln("Sigma.show() 4.1 vp: "+vp);
starterModule.writePaneln("Sigma.show() 4.1 P: "+P);
starterModule.writePaneln("Sigma.show() 4.1 scrollPane: "+scrollPane);
vp.setView(P);
starterModule.writePaneln("Sigma.show() 4.2");
} catch (Exception e) {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("C:\\javaout2.txt", true)));
out.println("ERROR SIGMA e:");
out.flush();
out.close();
}
}
Выход:
Sigma.show() 4.1 vp: javax.swing.JViewport[,0,0,902x800,layout=javax.swing.ViewportLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=25165832,maximumSize=,minimumSize=,preferredSize=,isViewSizeSet=true,lastPaintPosition=,scrollUnderway=false]
Sigma.show() 4.1 P: javax.swing.JPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=com.devexperts.dxpro.share[email protected]4719dad8,flags=9,maximumSize=,minimumSize=,preferredSize=]
Sigma.show() 4.1 scrollPane: javax.swing.JScrollPane[,0,30,917x800,layout=javax.swing.ScrollPaneLayout$UIResource,alignmentX=0.0,alignmentY=0.0,border=com.devexperts.dxpro.share[email protected]14716d46,flags=328,maximumSize=,minimumSize=,preferredSize=,columnHeader=,horizontalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,hidden,layout=com.devexperts.dxpro.shared.swing.styles.laf.impl.basic.StyledScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=HORIZONTAL,unitIncrement=1],horizontalScrollBarPolicy=HORIZONTAL_SCROLLBAR_AS_NEEDED,lowerLeft=,lowerRight=,rowHeader=,upperLeft=,upperRight=,verticalScrollBar=javax.swing.JScrollPane$ScrollBar[,902,0,15x800,layout=com.devexperts.dxpro.shared.swing.styles.laf.impl.basic.StyledScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=VERTICAL,unitIncrement=1],verticalScrollBarPolicy=VERTICAL_SCROLLBAR_ALWAYS,viewport=javax.swing.JViewport[,0,0,902x800,layout=javax.swing.ViewportLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=25165832,maximumSize=,minimumSize=,preferredSize=,isViewSizeSet=true,lastPaintPosition=,scrollUnderway=false],viewportBorder=]
Затем программа появляется замерзать на vp.setView (P); поскольку следующий writePaneln не вызывается.
ОДНАКО, ошибка не в ловушке либо ....
Здесь writePaneln (для полноты)
public static void writePaneln(String txt){
if(DEBUG){
try {
synchronized (textPane) {
//textPane.getDocument().insertString(textPane.getDocument().getLength(), txt + "\n", null);
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("C:\\javaout.txt", true)));
out.println(txt);
out.flush();
out.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null,"writePaneln ERROR: "+e);
}
}
}
EDIT 1
Я изменил к использованию invokeLater в моем java.util .timer:
class RemindTask extends TimerTask {
@Override
public void run() {
SwingUtilities.invokeLater(
new Runnable(){
@Override
public void run() {
handleGO();
};
}
);
}
}
звучит как нарушение EDT - все доступ к компонентам качания _must_ происходит на EDT. В этом случае нет необходимости синхронизировать на текстовой панели (вы находитесь в одном потоке, то есть EDT), или вы нарушаете правило – kleopatra
@kleopatra Я попытался удалить синхронизированную (текстовую панель), и я получаю ТАКУЮ ошибка – ManInMoon
удалить это не так (извините за то, что было неясно) - вы должны убедиться, что каждый и каждый доступ к компоненту swing находится на EDT (чтобы узнать больше, взгляните на главу параллелизма в учебнике, упомянутом в вики Swing tag, щелкните вкладку с информацией) – kleopatra