Max MSP的Java类-OutOfMemoryError
我试图通过mxj(max和java之间的桥梁)在我的max补丁中使用以下java。它意味着从IP地址下载jpeg流并渲染到矩阵。然而,我不断收到一长串错误,通常以OutOfMemoryError结束,在这一点上,我的整个笔记本电脑都会冻结。问题似乎是创建的字符串太多,没有及时删除。我和Max一起工作,但很少有java经验。非常感谢您的任何想法Max MSP的Java类-OutOfMemoryError,java,string,out-of-memory,javax.imageio,max-msp-jitter,Java,String,Out Of Memory,Javax.imageio,Max Msp Jitter,我试图通过mxj(max和java之间的桥梁)在我的max补丁中使用以下java。它意味着从IP地址下载jpeg流并渲染到矩阵。然而,我不断收到一长串错误,通常以OutOfMemoryError结束,在这一点上,我的整个笔记本电脑都会冻结。问题似乎是创建的字符串太多,没有及时删除。我和Max一起工作,但很少有java经验。非常感谢您的任何想法 import com.cycling74.max.*; import com.cycling74.jitter.*; import java.awt.im
import com.cycling74.max.*;
import com.cycling74.jitter.*;
import java.awt.image.*;
import javax.imageio.*;
import java.net.*;
// created by bbn on Feb 18, 2005
/**
* downloads an image from the web and outputs it as a matrix
*
* @author bbn
*/
public class v001imagedownloader extends MaxObject
{
String imgURL="http://www.example.com";
JitterMatrix matrixFromUrlImage = new JitterMatrix(4, "char", 640,480);
public void bang()
{
outlet(0, "jit_matrix", matrixFromUrlImage.getName());
}
public void downloadImage()
{
getImage(imgURL);
}
public void getImage(final String someUrl)
{
(new Thread() {
//public String url;
public void run() {
try {
URL u = new URL(someUrl);
BufferedImage bi = ImageIO.read(u);
JitterMatrix tempMatrix = new JitterMatrix(bi);
matrixFromUrlImage = new JitterMatrix(bi);
// copy the temp matrix to the our matrix
outlet(0, "jit_matrix", matrixFromUrlImage.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
public void setURL(String Url)
{
imgURL=Url;
}
public void notifyDeleted()
{
//getImage.release();
matrixFromUrlImage.freePeer();
}
}
在v001imagedownloader$1.run(v001imagedownloader.java:41)
原因:java.net.ConnectException:操作超时
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:382)
位于java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:241)
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:228)
位于java.net.socksocketimpl.connect(socksocketimpl.java:431)
位于java.net.Socket.connect(Socket.java:527)
位于java.net.Socket.connect(Socket.java:476)
位于sun.net.NetworkClient.doConnect(NetworkClient.java:163)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:424)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:538)
http.HttpClient.(HttpClient.java:214)
http.HttpClient.New(HttpClient.java:300)
http.HttpClient.New(HttpClient.java:319)
位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:987)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:923)
位于sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:841)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
位于java.net.URL.openStream(URL.java:1010)
在javax.imageio.imageio.read(imageio.java:1367)
... 还有一个
javax.imageio.IIOException:无法从URL获取输入流!
在javax.imageio.imageio.read(imageio.java:1369)
在v001imagedownloader$1.run(v001imagedownloader.java:41)
原因:java.net.ConnectException:操作超时
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:382)
位于java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:241)
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:228)
位于java.net.socksocketimpl.connect(socksocketimpl.java:431)
位于java.net.Socket.connect(Socket.java:527)
位于java.net.Socket.connect(Socket.java:476)
位于sun.net.NetworkClient.doConnect(NetworkClient.java:163)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:424)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:538)
http.HttpClient.(HttpClient.java:214)
http.HttpClient.New(HttpClient.java:300)
http.HttpClient.New(HttpClient.java:319)
位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:987)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:923)
位于sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:841)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
位于java.net.URL.openStream(URL.java:1010)
在javax.imageio.imageio.read(imageio.java:1367)
... 还有一个
javax.imageio.IIOException:无法从URL获取输入流!
在javax.imageio.imageio.read(imageio.java:1369)
在v001imagedownloader$1.run(v001imagedownloader.java:41)
原因:java.net.ConnectException:操作超时
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:382)
位于java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:241)
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:228)
位于java.net.socksocketimpl.connect(socksocketimpl.java:431)
位于java.net.Socket.connect(Socket.java:527)
位于java.net.Socket.connect(Socket.java:476)
位于sun.net.NetworkClient.doConnect(NetworkClient.java:163)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:424)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:538)
http.HttpClient.(HttpClient.java:214)
http.HttpClient.New(HttpClient.java:300)
http.HttpClient.New(HttpClient.java:319)
位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:987)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:923)
位于sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:841)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
位于java.net.URL.openStream(URL.java:1010)
在javax.imageio.imageio.read(imageio.java:1367)
将整个堆栈跟踪放在catch块中。您是否也可以在运行时将要连接的URL输出到catch块中?并确保可以从运行程序的环境访问URL?错误消息表示低级别套接字超时。也许您对服务器的攻击速度快于它处理请求的速度,最终导致客户端超时?如果是这样,您可能需要引入一些节流机制。PS:我不知道Max,只知道Java,对不起。:-)
at v001imagedownloader$1.run(v001imagedownloader.java:41)
Caused by: java.net.ConnectException: Operation timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:382)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:241)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:228)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:431)
at java.net.Socket.connect(Socket.java:527)
at java.net.Socket.connect(Socket.java:476)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:424)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:538)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:214)
at sun.net.www.http.HttpClient.New(HttpClient.java:300)
at sun.net.www.http.HttpClient.New(HttpClient.java:319)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:987)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:923)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:841)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
at java.net.URL.openStream(URL.java:1010)
at javax.imageio.ImageIO.read(ImageIO.java:1367)
... 1 more
javax.imageio.IIOException: Can't get input stream from URL!
at javax.imageio.ImageIO.read(ImageIO.java:1369)
at v001imagedownloader$1.run(v001imagedownloader.java:41)
Caused by: java.net.ConnectException: Operation timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:382)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:241)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:228)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:431)
at java.net.Socket.connect(Socket.java:527)
at java.net.Socket.connect(Socket.java:476)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:424)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:538)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:214)
at sun.net.www.http.HttpClient.New(HttpClient.java:300)
at sun.net.www.http.HttpClient.New(HttpClient.java:319)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:987)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:923)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:841)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
at java.net.URL.openStream(URL.java:1010)
at javax.imageio.ImageIO.read(ImageIO.java:1367)
... 1 more
javax.imageio.IIOException: Can't get input stream from URL!
at javax.imageio.ImageIO.read(ImageIO.java:1369)
at v001imagedownloader$1.run(v001imagedownloader.java:41)
Caused by: java.net.ConnectException: Operation timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:382)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:241)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:228)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:431)
at java.net.Socket.connect(Socket.java:527)
at java.net.Socket.connect(Socket.java:476)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:424)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:538)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:214)
at sun.net.www.http.HttpClient.New(HttpClient.java:300)
at sun.net.www.http.HttpClient.New(HttpClient.java:319)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:987)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:923)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:841)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
at java.net.URL.openStream(URL.java:1010)
at javax.imageio.ImageIO.read(ImageIO.java:1367)