热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(首个填坑)联想拯救者Y7000(自带win10home)安装Ubuntu16.04.6+NVIDIAGTX1650驱动

0.摘要由于NVIDIA的GTX1650显卡刚推出不久,就我所知,目前没有关于在Ubuntu上成功安装GTX1650显卡驱动教程,所以我在安装GTX1650显卡驱动的过程中走了很

0. 摘要


  • 由于NVIDIA的GTX1650显卡刚推出不久, 就我所知, 目前没有关于在Ubuntu上成功安装GTX1650显卡驱动教程, 所以我在安装GTX1650显卡驱动的过程中走了很多弯路, 同时也学会了很多的知识, 所以在此博客分享我的经验.
  • 第一部分主要讲了Ubuntu16.04系统的安装, BIOS设置和分区是重点; 不然很大概率会出现: 挂起后无法唤醒, 引导不成功, 或者swap分区不良的问题(swap分区小了可能会导致程序编译期间卡顿的问题);
  • 第二部分讲了WiFi连接不上的问题;(通病)
  • 第三部分讲了如何安装NVIDIA GTX1650显卡驱动;
    使用核显的情况下或者安装完系统以后(前提: 需要在BIOS中设置为Switchable Graphics), 用HDMI连接显示器后没有反应的问题, 这是由于独显闭源驱动没有成功安装的原因;
    (如果安装好了独显驱动, 而BIOS设置的是Discrete Graphics的时候(也就是拯救者Y7000的独显直连模式), Ubuntu系统的屏幕亮度是无法调节亮度的)
  • 第四部分讲了独显安装以后会出现的一些问题和现象;

设置好BIOS以及正确安装好显卡驱动, 那么下面很多问题就可以得到解决:
问题: 引导失败; 黑屏; 无限登录; 挂起后无法唤醒; 安装显卡驱动以后屏幕亮度不能调节; 图形是llvmpipe; HDMI连接显示器没有反应; compiz进程占用很多的CPU;提示The system is running in low-graphics mode进不入系统;

另: a. 本来安装这些是很简单的一件事, 但Y7000显卡采用了比较新的GTX1650显卡, 问题就变得不同了, 安装显卡驱动存在着较多问题, 到目前相关的帖子又没有, 所以这篇博客里讲了拯救者Y7000 2019如何安装Ubuntu和NVIDIA显卡驱动.
b. 这款Y7000应该属于Intel机型中拥有独显输出的机型了,所以外接显示器需要独立显卡来工作,而目前NVIDIA开源驱动Nouveau对GTX1650的支持并不是很好,所以导致了很多问题出来。
在这里插入图片描述
c. 另外Y7000 2019不支持集显和核显的热切换,需要重启电脑才行,此外它有个新的技术是Dual-Direct GFX(以及此处技术讲解),允许独显直接输出到笔记本的屏幕上,不是通过GPU渲染再交给核显进行显示;而2020.4月份联想通过NVIDIA提供的Advanced Optimus技术解决了不能热切换显卡的问题。


在这里插入图片描述
0.1. 所以2010年NVIDIA的Optimus技术解决了系统什么时候该用独立显卡什么时候该用集成显卡来运行程序的问题;而联想2019年的推出的DDG技术解决了先前不管怎么样独显处理完的数据还得交给核显来进行显示的难题;而2020.4月NVIDIA推出的Advanced Optimus技术解决了独显和核显热切换的难题以及独显直连的问题,相当于前面两种问题都被这个技术解决了。(可以看出联想在游戏本上的开发投入的精力还是不少)


1. 安装Ubuntu16.04.6系统(发布时间2019.02.28)

1.0. 由于安装ubuntu系统的教程很多, 所以这里只是大概讲下流程和需要注意的地方;
1.1. 首先在win10环境下使用自带的磁盘管理工具将某个盘压缩出自己所需要的空间, 我这里压缩了250G给Ubuntu系统使用, 压缩完成后会看到存在一个未分配的分区,如下图所示; (如果在安装类型中选择了第一项, 系统会自动识别出这个未分配的分区进行Ubuntu的安装, 并且还会分为 /swap 两个分区)
在这里插入图片描述1.2. 使用U盘制作启动盘:


  • 在win10上使用UltraSo工具将Ubuntuxxx.iso做成U盘启动盘;

1.3. 重点: 设置电脑BIOS选项(联想电脑: 开机连按F2) :
1.3.1. 在BIOS的Configuration这一项将图形设备Graphic Device选项改为: Switchable Graphics, 引导方式默认的UEFI就行;


  • 原因: 这样可以避免出现挂起后无法唤醒的问题, 因为这个显卡选项默认是独立显卡Discrete Graphics,
    由于真正的闭源驱动还没有安装成功(默认安装的是NVIDIA的开源驱动nouveau), 所以导致挂起后无法唤醒的问题;
    或者按默认的Discrete Graphics来也行, 安装好系统以后再改为Switchable Graphics就可以.

Graphic Device = Discrete Graphics, 会出现挂起后无法唤醒的问题. (这个时候系统设置->详细信息图形: llvmpipe(LLVM 6.0, 256 bits))
Graphic Device = Switchable Graphics, 不会出现挂起后无法唤醒的问题. (这个时候系统设置->详细信息图形: Intel® HD Graphics (Coffeelake 3x8 GT2) )


1.3.2. 在BIOS的Security这一项将Secure Boot改为: Disabled


  • 原因: 关闭安全模式, 才能进入Ubuntu系统, 否则即便安装成功了, 也不会引导到Ubuntu系统里;

1.4. 关机, 插入制作好的启动盘, 然后开机后连按F12(联想电脑) ,然后选择是启动盘那个选项;
在这里插入图片描述
注: 如果以前安装了Ubuntu系统, 现在想再安装同样的系统或者其他, 最好将以前的Ubuntu系统引导项从电脑删除干净, 不然到最后系统的引导项会有好多个Ubuntu, 那时候就不容易分不清了, 具体方法见: 此处
1.5. 等待片刻就开始了Ubuntu系统的安装选项界面, 选项如下(选择第一个或第二个均可), 然后开始安装, 选择语言等:
在这里插入图片描述
1.6. 重点:下来就是最重要的一步: 分区
1.6.1. 当执行到安装类型这一步的时候, 我们可以选第一个或者最后一个:
在这里插入图片描述


  • 如果选择了第一个选项, 系统会自动查找磁盘中未分配的分区进行安装, 并且将该分区分为/swap分区, 如果安装的是Ubuntu 16.04.4版本, 可以直接选第一项, swap分区 = 电脑的运存, 如果是16.04.5及以后版本, 这个swap分区 = 1G, 显然不太合适(我在我自己电脑上测试结果是这样), 我安装了Ubuntu16.04.6, 所以我选择了最后一个: 其他选项进行手动分区

1.7. 分区结果如下:
/分区:
在这里插入图片描述
swap分区:
在这里插入图片描述
我这里只分了两类/swap, 剩下的那些分区没有必要分了, 这样使用就挺方便; (一般情况下在Linux里必须建立一个/根分区, 系统内存已经足够大; 系统内存一般的情况下,至少要建立两个分区: /swap, 其他的其实无所谓,详见此处)
还有一个重要的boot分区没有分, 我直接使用了Windows的efi(当然也可以做两个efi分区来引导各自的系统,依然是点击+号,分差不多200M的空间挂载到/boot即可); 最终结果如下:
在这里插入图片描述
1.8. 点击现在安装, 设置用户名等, 就可以将Ubuntu安装进去了, 差不多需要花费2分钟左右的时间就完成了.
1.9. 重启进入系统, 这样会自动进入grub引导界面,第一项就是Ubuntu,我们可以点回车进入系统(如果还是进入了Windows系统,那我们可以重启的时候按F2进入BIOS选项将Ubuntu移到最上面启动,这样就会进入grub引导界面了)
注: EasyBCD引导不了EFI类系统, 所以还是建议直接修改BIOS顺序进入就行.
2.0. 如果使用Windows比较多, 我们可以通过修改grub来让Windows默认启动, 具体见此处连接


2. 通病:WiFi问题

2.1. 这个系列电脑存在一个通病(其他系列的不清楚): **WiFi连接不成功 **; 我们通过rfkill命令来查看无线传输设备的情况:

$ rfkill list all

结果如下, 存在两个WiFi设备, 我们这里将第一个设备ideapad禁用掉即可(因为被Hard blocked了):
在这里插入图片描述
解决方法, 在/etc/rc.local文件中exit 0的上一行写入echo "123" | sudo modprobe -r ideapad_laptop即可:

$ sudo gedit /etc/rc.local

2.2. 重启设备就可以连接上WiFi了.
2.3. 更新一下源,以便后续安装其他程序;

$ sudo apt-get update

2.4. (2019款电脑可略过)这款Y7000 2019 PG0使用的无线网卡型号是Intel AC 9560(无线网卡是接在PCI总线上的,所以我们通过lspci就可以从列表中看到无线网卡的型号),所以不用更新Ubuntu内核驱动版本(16.04.6默认内核版本为4.15.0)就可以使用此无线网卡;而Y7000 2020款使用的无线网卡是Intel AX201,这款是Intel新推出的无线网卡并且支持WiFi6,由于硬件很新,为了在Ubuntu上使用此网卡需要我们更新内核驱动,具体方法见此博客;[在新的硬件上使用旧的软件系统(或者旧的硬件上使用新的软件系统),很可能会出现这种内核版本的问题]
不同无线网卡对应的Linux内核版本情况,可见Intel官网:
在这里插入图片描述
不同Ubuntu版本对应的初始内核版本见此官网;

:电脑的三个卡介绍(显卡,声卡,网卡):很多电脑安装的主板声卡和有线网卡都是Realtek这个厂商的,因为便宜稳定;除此以外一个声卡是在NVIDIA独显上的,这个声卡主要是为了在外接显示器下通过HDMI接口输出声音信号而服务的;集成显卡和无线网卡大都采用的是Interl厂商的。


3. GTX1650显卡驱动的安装

我这款联想拯救者Y7000 2019版电脑安装的是旧的GTX1650显卡,在2020年4月份NVIDIA又推出了新的GTX1650显卡和GTX1650Ti显卡,升级成了GDDR6显存,具体区别可以见下图:
在这里插入图片描述
性能区别见此处,如果按照这篇帖子显卡安装失败了,有可能是新旧1650显卡的原因,这一部分的补充我写在了第六节。
补充资料:此处链接描述了笔记本电脑外接显示器的三种接口方式与注意的问题,原来Type-C接口也具有显示输出的功能,Type-C的显示输出功能其实并没有占用USB带宽,而是单独做了个DP显示总线放在了Type-C口上
3.0. 问题: 当进行完上面那些步骤以后, 如果通过HDMI去连接显示器以后会发现显示器没有任何输出, 这主要是因为此电脑的HDMI接口是连在独显上的, 但是独显的闭源驱动并没有安装上, 所以显示器没有任何输出, 通过成功安装GTX1650显卡驱动, 外接显示器就可以正常工作。
Ubuntu一般默认安装的是Intel的集显驱动以及独显的开源驱动,经常导致连接扩展屏没有图像输出(针对GTX1650显卡来说)
3.1. 安装NVIDIA驱动一共有三种方法:


  • ppa方式, 也就是添加软件源, 然后sudo apt-get install xxxx, 通过deb文件进行安装;点击这里可以查看显卡ppa软件源中不断添加更新的软件包;
  • 附加驱动方式,也就是系统设置->软件和更新->附加驱动中可以找到NVIDIA的驱动, 点击合适的版本,最后应用更改; (我这里是添加了ppa以后附加驱动才有内容的, 没有加ppa之前附加驱动是空白的);
  • .run方式, 也就是去NVIDIA驱动的官网下载对应显卡的run文件;

3.1.1. 查看电脑显卡的指令如下:

$ lspci -k | grep -A 2 -i "VGA"

在这里插入图片描述
3.2. 我这里第二和第三种都没有安装成功, 会出现黑屏或者循环登录的情况, 最后通过ppa的方式安装成功, 方法如下:
注: 由于第一次安装可能不成功, 所以需要卸载以前不成功的驱动, 卸载方法如下(如果是第一次安装NVIDIA则可以跳过):


  • ppa方式安装
    $ sudo apt-get purge nvidia-*
  • .run方式安装
    $ cd
    $ sudo ./NVIDIA-Linuxxxxx-version.run --uninstall

3.3. 通过ppa方式安装方法如下:
3.3.1. 由于电脑安装了NVIDIA的开源驱动nouveau, 所以我们先要将其屏蔽掉, 屏蔽方法是将其放入blacklists中; 首先我们通过lsmod | grep nouveau可以发现系统已载入的nouveau模块:
在这里插入图片描述


Nouveau是由第三方为NVIDIA显卡开发的一个开源3D驱动,也没能得到NVIDIA的认可与支持。虽然Nouveau Gallium3D在游戏速度上还远远无法和NVIDIA官方私有驱动相提并论,不过确让Linux更容易的应对各种复杂的NVIDIA显卡环境,让用户安装完系统即可进入桌面并且有不错的显示效果,所以,很多Linux发行版默认集成了Nouveau驱动,在遇到NVIDIA显卡时默认安装。企业版的Linux更是如此,几乎所有支持图形界面的企业Linux发行版都将Nouveau收入其中。
这段文字参考自此处
由于GTX1650很新,有可能这个开源驱动Nouveau对这个显卡的支持并不是那么完善,所以会导致无法使用扩展屏等一系列问题。


3.3.2. 禁用nouveau模块:

$ sudo gedit /etc/modprobe.d/blacklist.conf

在blacklist.conf文件中, 最后一行输入:


blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist rivatv
blacklist nvidiafb


3.3.3. 升级一下内核:

$ sudo update-initramfs -u

注: 这里应该会出现两个下面的警告:
W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915
W: Possible missing firmware /lib/firmware/i915/bxt_guc_ver8_7.bin for module i915
如果不修改,到时候安装ROS的时候也会存在这两个警告, 我们可以点击此处下载相应的文件, 复制到对应的目录即可:
$ cd [the path of bin file]
$ sudo cp kbl_guc_ver9_14.bin /lib/firmware/i915/
$ sudo cp bxt_guc_ver8_7.bin /lib/firmware/i915/


3.3.4. 重启

$ sudo reboot

3.3.5. 通过Ctrl + Alt + F1进入tty1界面(这个界面是纯黑底白字的, 如果想再次回到桌面, 可以通过Ctrl + Alt + F7进入), 然后将桌面管理器lightdm关闭, 添加ppa, 更新源, 查找推荐驱动, 安装驱动, 开启lightdm服务, 回到桌面, 重启.

$ sudo service lightdm stop
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo ubuntu-drivers devices # 这一步会看到推荐的驱动版本号,比如123
$ sudo apt-get install nvidia-123 nvidia-settings nvidia-prime
$ sudo service lightdm start

$ sudo reboot

需要注意的是: 我这里推荐安装的驱动版本是430, 结果失败了, 经过几次尝试安装了nvidia-418, 终端显示的是418.56版本, 虽然不是推荐的, 但是安装成功,没有问题 (推荐的驱动430安装失败…)
在这里插入图片描述


疑问: GTX1650显卡是2019年4月23号推出的显卡, 430.09版本的驱动也是该天推出的, 驱动的官网也明确说明添加了对GTX1650的support, 后续的430.xx版本也推出了, 但是通过ppa方式和.run安装均失败. 418.56驱动是3月20号推出的, 没有讲支持GTX1650驱动, 但是却可以安装成功.
注:430.09驱动安装可以见此处,不确保使用此方法可不可以安装成功(2019.04.24的教程)。


3.4. 检测成功与否

3.4.1. 重启以后可以发现系统设置->详细信息中的图形变成了: GeForce GTX 1650/PCIe/SSE2, 如下图所示:
在这里插入图片描述
3.4.2. 通过下面命令可以打开NVIDIA的配置面板, 可以发现渲染器Renderer为独立显卡GTX1650, 如下图:

$ nvidia-settings

在这里插入图片描述
3.4.3. 通过下面命令可以发现, 系统是否使用了NVIDIA显卡驱动, 如下图所示, 如果使用率为0, 多半是安装错误;

$ nvidia-smi --loop=1

在这里插入图片描述
3.4.5 以前的旧电脑通过ppa安装推荐的NVIDIA驱动, 一次就成功了, 但是这次这个GTX1650着实让人觉得有些奇怪.
3.5. 双显卡切换
3.5.1. 安装好独立显卡以后,如果需要切换回集成显卡,可以在nvidia-settings界面的PRIME Profiles选项中切换为集成显卡,重启或注销;
3.5.2. 如果切换到集成显卡,会发现nvidia-settings打不开了,这个时候我们可以通过在终端输入命令来切换为独立显卡:

$ sudo prime-select nvidia

4. 问题

4.1. 如果出现下面问题, 多半是独立显卡安装有问题或者BIOS的图像选项没有设置对:


  • 图形选项不是GTX1650, 而是llvmpipe之类的; (此种情况下, compiz进程会占用相当大的CPU, 会吃掉你几个核, 从20%~300%, 虽然察觉不出来, 其实是有问题的,开的窗口越多越明显) (多半是.run文件安装引起的问题, 不知道是不是因为加了-no-opengl-files的原因)
  • 显卡配置的渲染器不是独立显卡, 而是llvmpipe(LLVM 6.0, 256 bits)之类的, 里面没有PRIME Profiles选项;
  • 显卡的使用率为0, 进程里显示为no progress;
  • 重启以后黑屏(.run安装方式会出现这个问题)
  • 或者提示The system is running in low-graphics mode;
  • 电脑挂起以后无法唤醒, 风扇一直转, 只能通过重启来解决; (如果电脑正确使用了集显或者独显不会出现挂起后无法唤醒的问题);

4.2. 如果安装驱动出现了上面的问题, 导致黑屏或者无限登录, 我们可以通过Ctrl + Alt + F1进入tty1界面卸载掉NVIDIA驱动就可以进入有桌面的系统了, 紧接着又可以尝试安装NVIDIA驱动了.


5. 安装相关软件

5.1. 系统方面: 安装htop, terminator, indicator-sysmonitor;
5.2. 输入法: 搜狗输入法;
5.3. 安装ROS环境;
5.4. 安装catkin tools,支持catkin build

$ sudo apt-get install python-catkin-tools

5.4. 编译环境: CLion, vscode, MATLAB; (注意: 不要安装roboware, 异常不好用)
5.5. 优化库相关项: Eigen, Sophus, Ceres, g2o, Pangolin;
5.6. 文档类: 福昕阅读器, WPS, Xmind, Typora;
5.7. 小工具类: redshift-gtk;


6. 补充

6.1. 根据下面的回复区,目前430.64也可以安装成功,GTX1650在它的support列表中;
详见此处官网430.64驱动说明
6.1.1. 在官网驱动页面对GTX进行选择时不要选择“Geforce GTX16 series (Notebooks)”,要选择“Geforce 16 series”,否则出不来430.64驱动版本的这个选项。
6.1.2. 有的小伙伴在Ubuntu18.04 GTX1650配置下,435.21版本也可以安装成功,这个驱动介绍在Geforce GTX16 series (Notebooks)上;需要注意的是笔记本的2060显卡和台式机的2060显卡是不一样的,但是随着技术的进步,笔记本的显卡相比台式机的不再阉割了,所以目前他们的名字都一样,以往同一型号的显卡使用后缀来区分台式机和笔记本,但需要明白的是笔记本显卡由于体积散热的原因显卡的性能释放不出来,参见此链接的评论。
6.2. 有的小伙伴购买了联想拯救者R7000型号,配置为R7-4800h, GTX1650;在Ubuntu16.04上面尝试了多次,最终安装440.100这个驱动版本成功了,此版本驱动下载地址点击此处。 发布日期为: 2020.6.24
6.3. PPA指南;通过PPA软件包的方式相应的开发人员能够创建自己的存储库,用户第一时间可以得到新的软件包或更新包,所以Ubuntu开发了一个launchpad的平台供开发人员使用,我们可以通过在ppa查看相应的驱动包,比如上面介绍的很多显卡版本都可以在它的ppa中找到,可以作为一种验证手段。


推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
author-avatar
阿克苏的风格
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有