在阅读了CoroutineScope的介绍和javadoc后,我仍然有点混淆了背后的想法CoroutineScope是什么.
文档的第一句"定义新协程的范围".我不清楚:为什么我的协同程序需要一个范围?
另外,为什么单独的协同构建器被弃用?为什么这样做更好:
fun CoroutineScope.produceSquares(): ReceiveChannel<Int> = produce {
for (x in 1..5) send(x * x)
}
Run Code Online (Sandbox Code Playgroud)
代替
fun produceSquares(): ReceiveChannel<Int> = produce { //no longer an extension function
for (x in 1..5) send(x * x)
}
Run Code Online (Sandbox Code Playgroud) 我们使用以下语句实例化密码:
Cipher cipher = Cipher.getInstance("AES");
SecretKeySpec key = new SecretKeySpec(cipherKey, "AES");
Run Code Online (Sandbox Code Playgroud)
这适用于java 7(1.7_45),但不再适用于Java 8(1.8_25).我们传递cipher给a CipherInputStream并使用流来读/写数据.实际的异常发生在close.
编辑:
快速浏览一下JDK代码就会发现BadPaddingException被重新抛出,并且在7中它被忽略了:
JDK 7:CipherInputStream.close:
try {
this.cipher.doFinal();
} catch (BadPaddingException var2) {
;
} catch (IllegalBlockSizeException var3) {
;
}
Run Code Online (Sandbox Code Playgroud)
JDK 8:CipherInputStream.close:
try {
if(!this.done) {
this.cipher.doFinal();
}
} catch (IllegalBlockSizeException | BadPaddingException var2) {
if(this.read) {
throw new IOException(var2);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是如何首先避免BadPaddingException?
编辑2:
在做了一些研究和实验后,我们进入了以下测试程序:
public final class CipherSpike2 {
private static final byte[] SECRET_KEY = new byte[]{1, 2, 3, …Run Code Online (Sandbox Code Playgroud) 我已经实现了一个具有以下属性的简单着色器: - 材质(环境,漫反射和高光) - 定义对象颜色的基色 - 浅色
片段着色器:(vColor是对象的基色)
vec3 lightDir = normalize(vec3($uLightPos.xyz - vPosInEye.xyz));
vec3 viewerPos = normalize(vec3(-vPosInEye.xyz));
vec3 specularReflection = normalize(-reflect(lightDir, vNormal));
float diffFactor = max(dot(vNormal, lightDir), 0.0);
vec4 Id = $uIdColor * diffFactor * vColor ;
vec4 Ia = $uIaColor * vColor;
vec4 Is = clamp($uIsColor * pow(max(dot(specularReflection, viewerPos), 0.0), $uIsShininess), 0.0, 1.0);
gl_FragColor = (Id + Ia + Is) + $uLightColor;
Run Code Online (Sandbox Code Playgroud)
如您所见,我将材质的环境颜色乘以对象的基色.这似乎是正确的,因为我想将这些颜色混合在一起.
在"Open GL ES 2.0编程指南"一书中,这是以相同的方式实现的.在最后一行,我添加了灯光的颜色.
我试图先增加颜色然后我得到奇怪的结果:黄色*蓝色导致黑色(这是明确的,因为黄色是(1.0,1.0,0)和蓝色(0.0,0.0,1.0)所以我用+替换*这似乎产生了正确的颜色(白色).
所以我的问题是:当我必须将两种颜色相乘以及何时添加它们时,是否有经验法则?
我想创建一个只读组合框.用户不应该从弹出列表中选择另一个项目.这意味着弹出列表不应该打开或应该为空.
我看到以下解决方案:
设置仅包含一个项目(当前所选项目)的ComboBox模型,因此当用户单击箭头按钮时,将显示一个空列表.
添加一个PopupMenuListener并popupMenuWillBecomeVisible隐藏菜单.这是有问题的:我们必须combo.hidePopup();从内部打电话SwingUtilities.invokeLater()
空模型方法看起来有点笨重.第二种方法显示弹出列表只有几分之一秒,足够短以至于被注意到.这非常难看.
有第三种解决方案吗?
编辑:已实施的解决方案:
我从splungebob实现了建议的方法,这是我的代码供将来参考:
private void makeComboReadonly() {
Component editorComponent = box.getEditor().getEditorComponent();
if (editorComponent instanceof JTextField) {
((JTextField) editorComponent).setEditable(false);
}
for (Component childComponent : box.getComponents()) {
if (childComponent instanceof AbstractButton) {
childComponent.setEnabled(false);
final MouseListener[] listeners = childComponent.getListeners(MouseListener.class);
for (MouseListener listener : listeners) {
childComponent.removeMouseListener(listener);
}
}
}
final MouseListener[] mouseListeners = box.getListeners(MouseListener.class);
for (MouseListener listener : mouseListeners) {
box.removeMouseListener(listener);
}
final KeyListener[] keyListeners = box.getListeners(KeyListener.class);
for (KeyListener …Run Code Online (Sandbox Code Playgroud) 我有一个关于kotlin-maven插件的问题:如何确定编译顺序?我的意思是:kotlin编译器必须先来吗?它能理解java代码吗?java编译器不理解kotlin代码,所以我猜它会检查字节代码,但为此,必须存在kotlin的字节码,因此有人必须确定kotline编译器必须在javac之前编译其代码.
示例:我有依赖于Kotlin B类的Java A类,B也依赖于A.
我是否必须在maven插件中通过在java maven编译器之前声明它来手动执行某些操作?
通过在父容器 'foo' 上设置 css 'height' 属性,计算出的内部元素的 'font-size' 会发生错误的变化。这只发生在 Chrome 移动设备上。
要对此进行测试,请尝试在 Chrome 下运行以下代码并在开发者控制台中选择任何移动设备:
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>Test</title>
<style>
.foo {
height: 600px;
color: white;
background: teal;
}
</style>
</head>
<body>
<section>
<h2>Header in first section</h2>
<p>Text with a normal size. Text with a normal size.</p>
</section>
<section class="foo">
<h2>Header in second section</h2>
<p>This text changes size when commenting out 'foo's height property in the Chrome developer console and mobile mode (e.g Galaxy S5) - but why?</p>
</section>
</body> …Run Code Online (Sandbox Code Playgroud)我想在我的程序的桌面版本中将异常记录到文件中.为此,我在main-Method中注册了一个uncaughtExceptionHandler.但是现在应该将异常记录到文件中 - 这是可能的还是我必须更改System.out?这有效吗?
我想用某个签名更改方法:
public OldReturnType get.*(Params) {
//lots of code
}
Run Code Online (Sandbox Code Playgroud)
对此:
public NewReturnTyp get.*(Params) {
//lots of code
}
Run Code Online (Sandbox Code Playgroud)
- >我想替换返回类型.我用SSR试过这个:
复制现有模板"类的方法".这会产生模板:
class $ Class $ {$ ReturnType $ $ MethodName $($ ParameterType $ $ Parameter $); }
我首先尝试分别替换$ ReturnType $ OldType和NewType:
搜索模板:
class $Class$ {
OldType $MethodName$($ParameterType$ $Parameter$);
}
Run Code Online (Sandbox Code Playgroud)
替换模板:
class $Class$ {
NewType $MethodName$($ParameterType$ $Parameter$);
}
Run Code Online (Sandbox Code Playgroud)
这给了我所有的方法,但如果我替换它,该方法将被删除.
然后我尝试通过以下方式更改模式:
搜索模板:
class $Class$ {
$OldType$ $MethodName$($ParameterType$ $Parameter$);
}
Run Code Online (Sandbox Code Playgroud)
并且指定$ OldType $应该是搜索的目标.我还为此变量指定了一个RegEx模式:OldType.
替换模板:
class $Class$ {
NewType $MethodName$($ParameterType$ $Parameter$);
}
Run Code Online (Sandbox Code Playgroud)
这也找到了所有方法,但是如果我替换它们就会被删除.我尝试了非常不同,总是有相同的结果:如果我替换匹配,该方法将被删除.如何指定搜索/替换模板以在签名中将OldType替换为NewType.
如果我声明一个这样的对象:
void main() {
MyClass class;
}
Run Code Online (Sandbox Code Playgroud)
它将在堆栈上自动创建.
如果我这样做会发生什么:
class MySecondClass {
private:
MyClass class;
}
Run Code Online (Sandbox Code Playgroud)
会员是否会在堆栈上创建?如果是这样,如果MySecondClass是通过创建会发生什么new?这个成员还会在堆叠中吗?