精华内容
下载资源
问答
  • Java异常 java.lang.IllegalStateException异常
    2020-10-21 20:31:39

    Java异常 java.lang.IllegalStateException异常

    该异常表示,当前dao对客户端的响应已经结束不能在响应已经结束(或说消亡)后再内向客户端(实际上是容缓冲区)输出任何内容。

    在一次响应commit之前,所有的内容输出都将写入servlet引擎的缓冲区(tomcat或weblogic的内容空间), 而在commit之后,上一次response向缓冲区写入的内容,将清空。

    由于servlet在没有设置单线程的情况下(使用Single-Threaded Model,servlet实现SingleThreadModel接口,jsp使用<%@ page isThreadSafe=“false” %>),是多线程的,所以上面所说的缓冲区,都将是该response所属的线程私有的内存空间。

    有了这个概念,将可以分析碰到的关于servlet多线程的很多问题。如果不能确认response是否已经committed. 可以调用response.isCommitted()来判断。导致这个错误最普遍的原因是,jsp有编译错误。

    更多相关内容
  • IllegalStateException异常

    2016-10-27 10:00:51
    原文... 错误原因:  该异常表示,当前对客户端的响应已经结束,不能在响应已经结束(或说消亡)后再向  客户端(实际上是缓冲区)输出任何内容。 具体分析:

    原文http://jorton468.blog.163.com/blog/static/72588135201102441617287/

    错误原因:

                           该异常表示,当前对客户端的响应已经结束,不能在响应已经结束(或说消亡)后再向

                           客户端(实际上是缓冲区)输出任何内容。

    具体分析:

                            首先解释下flush(),我们知道在使用读写流的时候数据先被读入内存这个缓冲区中,

                             然后再写入文件,但是当数据读完时不代表数据已经写入文件完毕,因为可能还有

                             一部分仍未写入文件而留在内存中,这时调用flush()方法就会把缓冲区的数据强行

                             清空输出,因此flush()的作用就是保证缓存清空输出。

                            response是服务端对客户端请求的一个响应,其中封装了响应头、状态码、内容等,

                            服务端在把response提交到客户端之前,会向缓冲区内写入响应头和状态码,然后

                            将所有内容flush。这就标志着该次响应已经committed(提交)。对于当前页面中

                            已经committed(提交)的response,就不能再使用这个response向缓冲区写任何东西

                         (注:同一个页面中的response.XXX()是同一个response的不同方法,只要其中一个

                            已经导致了committed,那么其它类似方式的调用都会导致 IllegalStateException异常)。

    【注意】能够导致响应已经committed的操作包括:forward, redirect, flushBuffer

    JDK API:

             

    flushBuffer

            public void flushBuffer()throws IOException
    Forces any content in the buffer to be written to the client. A call to this method automatically commits the response, meaning the status code and headers will be written.   
                ②
                    

    sendRedirect

             public void sendRedirect(String location)throws IOException
    Sends a temporary redirect response to the client using the specified redirect location URL. This method can accept relative URLs; the servlet container must convert the relative URL to an absolute URL before sending the response to the client. If the location is relative without a leading '/' the container interprets it as relative to the current request URI. If the location is relative with a leading '/' the container interprets it as relative to the servlet container root.

    If the response has already been committed, this method throws an IllegalStateException. After using this method, the response should be considered to be committed and should not be written to.

                ③                

    forward

    public void forward(ServletRequest request,ServletResponse response)
                                 throws ServletException,IOException
    Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. This method allows one servlet to do preliminary processing of a request and another resource to generate the response.

    For a RequestDispatcher obtained via getRequestDispatcher(), the ServletRequest object has its path elements and parameters adjusted to match the path of the target resource.

    forward should be called before the response has been committed to the client (before response body output has been flushed). If the response already has been committed, this method throws anIllegalStateException. Uncommitted output in the response buffer is automatically cleared before the forward.

    The request and response parameters must be either the same objects as were passed to the calling servlet's service method or be subclasses of the ServletRequestWrapper or ServletResponseWrapper classes that wrap them.

     

    备    注:

                      在一次响应commit之前,所有的内容输出都将写入servlet引擎的缓冲区(tomcat或

                      weblogic的内容空间), 而在commit之后,上一次response向缓冲区写入的内容,将清空。

                      由于servlet在没有设置单线程的情况下(使用Single-Threaded Model,servlet实现

                      SingleThreadModel接口,jsp使用<%@ page isThreadSafe="false" %>),是多线程的,所以

                      上面所说的缓冲区,都将是该response所属的线程私有的内存空间。有了这个概念,

                      将可以分析碰到的关于servlet多线程的很多问题。

                      如果不能确认response是否已经committed. 可以调用response.isCommitted()来判断。

                      导致这个错误最普遍的原因是,jsp有编译错误。

    常见解决办法:

                     ①在response.sendRedirect()方法后加return语句即可如下:
                           response.sendRedirect("login.jsp");
                           return;
                     检查提交的url是否有误。

                     如果你的页面中用了清缓存代码response.flushbuffer();又用到了response.sendRedirect(url);

                         你可以把response.flushbuffer();去掉,或者用JS的window.location.href="url";来做转向。

                     ④如果你用了OutputStream,而web容器生成的servlet代码中有out.write(””),这个和JSP中调用的

                         response.getOutputStream()冲突。out.write()这个是字符流,而response.getOutputStream()

                        是字节流,你不能在同一个页面中调用多个输出流。无论先调用哪一个,在调用第二个时都会抛出

                          IllegalStateException,因为在jsp中,out变量是通过response.getWriter得到的。在多个使用了

                         outputStream的<%%>语句之间不能有空格及多余的字符。也就是页面中除了使用了

                          outputStream的<%%>之外不能有空格或其它任何字符,在之内的语句可以有空格及回车。

                     在JSP页面做输出的时候有两种方式.一是通过JspWriter,另一个是通过

                     OutputStream,但二者互相排斥.如果并存的话就会报告以上异常.                     

                         在不得不使用OutputStream的时候.我们必须要把JspWriter舍弃掉了。找到

                         请求异常的页面所对应的Servlet..把其中所有使用JspWriter的语句全部去掉.

                         或者是到你的JSP文件里把动态输出的代码注释掉.这里注意换行和空格制表符

                         为JspWriter输出.应该一起去掉.保存文件重新启动服务器你会发现上述异常

                         消失了。                    

             由于jsp container在处理完成请求后会调用releasePageContet方法释放
              所用的PageContext object,并且同时调用getWriter方法,由于getWriter方法
              与在jsp页面中使用流相关的getOutputStream方法冲突,所以会造成这种异常,
             解决办法是:只需要在jsp页面的最后加上两条语句:   
                     out.clear(); 
                     out=pageContext.pushBody();
             即可(其中out,pageContext均为jsp内置对象!) 。
    展开全文
  • Tomcat 部署项目报IllegalStateException异常的解决方案 lib目录放错位置导致异常 我们使用IDEA maven构建项目时有时需要我们手动导些jar包,一般我们会放在项目的lib目录下,可是今天我是用IDEA 2021.1 跑项目时时...

    Tomcat 部署项目报IllegalStateException异常的解决方案

    在这里插入图片描述

    lib目录放错位置导致异常

    我们使用IDEA maven构建项目时有时需要我们手动导些jar包,一般我们会放在项目的lib目录下,可是今天我是用IDEA 2021.1 跑项目时时报了IllegalStateException异常,原因是使用maven构建项目要把自己手动导的jar包放在web目录下对应的WEB-INF对应的lib目录下,这样项目在打包的时候才会把外部jar包打包进去,不然就会报IllegalStateExceptionClassNotFoundException异常。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmZNRbHV-1627360272736)(C:\Users\17609\AppData\Roaming\Typora\typora-user-images\image-20210727122708682.png)]

    第二种解决方案

    我们需要把手动导的jar包拷贝一份到我们的Tomcat\lib目录下,这样Tomcat在运行时就不会出现ClassNotFoundException异常。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-McklHThS-1627360272739)(C:\Users\17609\AppData\Roaming\Typora\typora-user-images\image-20210727122859339.png)]

    展开全文
  • 主要介绍了Android异常 java.lang.IllegalStateException解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 解决使用MediaPlayer开发时抛IllegalStateException异常的办法
    今天编写自己的播放器时总是报了下面的错误,
    而求错误指向mediaplayer.setDataSource()这个一行。
    我反复看了很久也没觉得有什么错误,甚至利用Toast查看了SP的信息,发现确实是正确的文件路径,所以肯定不是路径的问题,后来去网上查了很多资料,各种各样但都没有效果,没办法接着分析自己写的代码逻辑,仔细看了看MainActivity中的iniMediaPlayer()方法,觉得很有问题,下面贴代码:
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
        private MediaPlayer mediaPlayer = new MediaPlayer();
        public List musicList = new ArrayList<>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button play = (Button)findViewById(R.id.play);
            Button stop = (Button)findViewById(R.id.stop);
            Button pause = (Button)findViewById(R.id.pause);
            ListView listView = (ListView)findViewById(R.id.list_view);
            play.setOnClickListener(this);
            stop.setOnClickListener(this);
            pause.setOnClickListener(this);
            if (Environment.getExternalStorageDirectory().listFiles(new MusicFilter()).length > 0){
                for (File file : Environment.getExternalStorageDirectory().listFiles(new MusicFilter())) {
                    musicList.add(file.getAbsolutePath().substring(20));
                    }
            }
            ArrayAdapter adapter = new ArrayAdapter<>(MainActivity.this,
                    android.R.layout.simple_list_item_1, musicList);
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    String SD = "/storage/emulated/0/";
                    String path =  musicList.get(i).toString();
                    String SP = SD + path;
                    Toast.makeText(MainActivity.this,SP,Toast.LENGTH_SHORT).show();
                    try {
    
                         mediaPlayer.setDataSource(SP);
                         mediaPlayer.prepare();
                        mediaPlayer.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
            if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE },1);
            }else{
                initMediaPlayer();
            }
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.play:
                    if (!mediaPlayer.isPlaying()){
                        mediaPlayer.start();
                    }
                    break;
    
                case R.id.stop:
                    if (mediaPlayer.isPlaying()){
                        mediaPlayer.reset();
                        initMediaPlayer();
                    }
                    break;
                case R.id.pause:
                    if (mediaPlayer.isPlaying()){
                        mediaPlayer.pause();
                    }
                    break;
                default:
                    break;
            }
    
        }
        private void initMediaPlayer(){
            try {
                File file = new File(Environment.getExternalStorageDirectory(),"m.mp3");
                mediaPlayer.setDataSource(file.getPath());
                mediaPlayer.prepare();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                               @NonNull int[] grantResults) {
            switch (requestCode){
                case 1:
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                        initMediaPlayer();
                    }else{
                        Toast.makeText(this,"无权限",Toast.LENGTH_SHORT).show();
                        finish();
                    }
                    break;
                default:
            }
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (mediaPlayer != null){
                mediaPlayer.stop();
                mediaPlayer.release();
            }
        }
    }

    
    
     try {
                        mediaPlayer.reset();
                         mediaPlayer.setDataSource(SP);
                         mediaPlayer.prepare();
                        mediaPlayer.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    仔细想想,每次使用MediaPlarer都是要先初始化和释放资源的,也就是要reset()的,之前在设置listview点击事件时没有注意到这点,所以一直有这个异常,而这个异常可以解释为:因为java里面的mediaplayer对象的状态和native的对象状态发生了不一致。也就是说,你在用MediaPlayer之前没有初始化或者没有回复到原来刚创建是的状态,所以只要加上这一句就可以了:

    展开全文
  • 1.首先注意迭代时要next一下 it.next(); 2.注意remove对象是否存在,如果这个记录已被remove掉,再次remove会出现此异常,容易出现在对同一对象(如List)做多次迭代remove的情景中
  • IllegalStateException异常情况

    万次阅读 2018-12-22 15:24:05
    出现这种情况是因为在BaseActivity中: ButterKnife.bind(this); 没有添加在下面 setContentView(getContentViewId()); 修改成: setContentView(getContentViewId()); ButterKnife.bind(this);......
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • add方法初始化了lastRet 执行set()方法不会改变lastRet的值,而执行remove()后,lastRet的值从3变为2,执行add()后,lastRet的值从2变成3.为什么会这样设计呢? 因为执行add,remove操作后,当前index的值就改变...
  • forEachRemaining方法出现IllegalStateException异常代码异常原因解决 代码 ArrayList<String> strings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add...
  • java.lang.IllegalStateException: Cannot get a FORMULA value from a NUMERIC formula cell at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.java:654) at org.apache.poi.hssf.usermodel....
  • java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all servers([172.17.38.223:8848]) tried: failed to req API:172.17.38.223:8848/nacos/v1/ns/instance. code:500 msg: java...
  • 当我们在使用listview时,数据在跟新的时候频繁滑动容易造成此异常,java.lang.IllegalStateException:。非法状态异常。报以下错误。 java.lang.IllegalStateException: The content of the adapter has changed ...
  • java.lang.IllegalStateException异常解决

    万次阅读 2017-12-21 15:51:20
    java.lang.IllegalStateException异常解决 最近在调试xwiki的时候遇到java.lang.IllegalStateException异常,在google上baidu了一把 经过分析查看jdk文档终于找到了解决方案,在response.sendRedirect("")方法后...
  • illegalstateexception
  • springcloud项目中IllegalStateException异常 瞄到了这里,才发现自己创建的服务9101端口号与别人的服务端口号冲突了。修改过来就好了。
  • Bean property 'baseDaomapper' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?  第一种情况:可能是mapper映射文件对应的路径...
  • ![图片说明](https://img-ask.csdn.net/upload/201901/02/1546432749_554681.png)
  • 异常表示,当前对客户端的响应已经结束,不能在响应已经结束(或说消亡)后再向客户端(实际上是缓冲区)输出任何内容。 目前本人知道的解决一种情况的方案:重新部署tomcat服务器 1.选中tomcat服务器并将其清除 ...
  • 问题描述: ...java.lang.IllegalStateException:Cannot forward a response that is already committedIllegalStateException:response already commitedIllegalStateException:getOutputStream() ha...
  • java.lang.IllegalStateException异常简单分析和简单解决
  • 出现java.lang.IllegalStateException异常导致所有请求都报404错误,异常详情如下: 解决办法: 出现这个异常是因为web.xml配置出现了错误,检查你的web.xml。一般情况是因为web.xml中的某个url-pattern少加了一...
  • 问题情境: 问题出现在尝试代码实现SpringMVC主要...// 此句代码执行时抛异常,页面405 request.getRequestDispatcher(result.getView()).forward(request, response); 控制台的异常信息: java.lang.Illegal...
  • 往队列添加一个元素,如果队列已满抛出IllegalStateException异常。 offer(E e) -> 往队列添加一个元素,true成功,false失败,和add区别在与不会因为队列已满抛异常。 删除元素接口: remove() -> 删除队列...
  • java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]. Specify @BootstrapWith's 'value' attribute or make the default bootstrapper class available.  at org.spr...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,474
精华内容 24,989
关键字:

illegalstateexception异常