我正在使用一个函数(private void console()),它将格式化文本写入JTextPane。 我有一个名为ImageWork()的类可以处理我的照片。
我的问题:我先调用console("start with work")
函数,然后调用a
我的班级编辑图像的功能(需要一些时间)。然后我再次呼叫我的控制台(“完成”)功能。我已经尝试了很多东西,编辑图像的方法等到控制台功能准备就绪没有成功:(。
因此,每当我首先调用3个函数时,图像将被编辑,然后控制台功能在我的文本窗格中写入两个文本。
private void color2gray()
{
console("start")
try
{
myImg.color2gray();
console("success");
repaint();
}
catch (Exception e)
{
console("no success");
}
程序运行正常。我的问题是我希望我的控制台(JtextPane)中的文本该函数现在启动然后函数color2gray启动,因为该函数可能需要一分钟的大图片。
我已经尝试过将控制台返回类型更改为boolean并调用它:
while (!(console("start")) {};
如果有人找到解决该问题的方法,我会很高兴的。感谢
console()代码:
private void console(String str,boolean fehler)
{
time=new GregorianCalendar();
String help=time.getTime().toString();
help=help.substring(0,19);
doc = (StyledDocument) console.getDocument();
Style style = doc.addStyle("StyleName", null);
StyleConstants.setForeground(style, Color.black);
try { doc.insertString(doc.getLength(),help, style); }
catch (BadLocationException e) { e.printStackTrace(); }
if (fehler) StyleConstants.setForeground(style, Color.red);
else StyleConstants.setForeground(style, new Color(0,125,0));
try { doc.insertString(doc.getLength()," : "+str+"\n", style); }
catch (BadLocationException e1) { e1.printStackTrace(); }
}
答案 0 :(得分:0)
调用color2gray()的线程的名称是什么?将其添加到该函数的第一行以查找:
System.out.println("Thread = " + Thread.currentThread().getName());
您可能会看到如下输出:
Thread = AWT-EventQueue-0
这意味着代码在“事件线程”上运行。这应该是修改Swing / GUI组件的唯一线程。并且这个线程不应该做长时间的工作。如果这是事件线程,那么您需要在后台完成长时间的工作。
变化
myImg.color2gray();
到
Thread t = new Thread() {
@Override
public void run() {
myImg.color2gray();
}
};
t.start();
作为开始。并阅读有关swing事件线程的更多信息:
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html http://en.wikipedia.org/wiki/Event_dispatching_thread